Strawberry Perl:无法构建 Tcl 模块
Strawberry Perl: can't build Tcl module
我在 Windows 10 平台上使用 Strawberry Perl 构建 Tkx 模块时遇到问题。它在 Tcl 依赖项上失败。错误是:
Tcl.o:Tcl.c:(.text+0x65): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x15e): undefined reference to `__imp_Tcl_ListObjGetElements'
Tcl.o:Tcl.c:(.text+0x1fb): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x29a): undefined reference to `__imp_Tcl_GetByteArrayFromObj'
Tcl.o:Tcl.c:(.text+0x4bf): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x538): undefined reference to `__imp_Tcl_NewDoubleObj'
Tcl.o:Tcl.c:(.text+0x58f): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x5d7): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x621): undefined reference to `__imp_Tcl_NewListObj'
Tcl.o:Tcl.c:(.text+0x643): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6a1): undefined reference to `__imp_Tcl_NewObj'
Tcl.o:Tcl.c:(.text+0x6af): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6d1): undefined reference to `__imp_Tcl_NewIntObj'
Tcl.o:Tcl.c:(.text+0x786): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x839): undefined reference to `__imp_Tcl_WrongNumArgs'
还有很多很多类似的错误。我搜索了一下,但我什至没有找到任何东西。 Strawberry Perl 版本是5.26.4,我做了推荐的
cpan Tkx
我尝试自己构建 Tcl 模块时遇到同样的错误:
cpan Tcl
我安装了 ActiveTcl,但 Strawberry Perl 似乎没有看到它。
如何获得适用于 Strawberry Perl 的可用 Tcl 模块?
我设法让构建在 Strawberry Perl 5.26 上运行。 (与 5.24 捆绑在一起的 binutils 包似乎有一个错误,导致它无法识别来自 Tcl 的 .lib
文件。)
问题似乎是
Warning (mostly harmless): No library found for -ltcl86
在香草版本中,因为该库绝对是必需的。我的C:\ActiveTcl\lib
里面确实没有tcl86.lib
,但是有一个tcl86t.lib
.
所以...
- 运行
cpan
。这会让你进入 cpan shell.
- 运行
look Tcl
。这将下载 Tcl 模块(如果需要)并将您放入构建目录中的 cmd shell。
- 使用您喜欢的编辑器编辑
Makefile.PL
。
在第 183 行附近应该有一行说:
$libpath .= " -ltcl$buildtype$tclver";
在其后添加一行:
$libpath .= "t";
保存并退出编辑器。
- 运行
perl Makefile.PL
。它现在应该使用 -ltcl86t
.
- 在 cmd shell 中键入
exit
返回到 cpan shell。
- 运行
install Tcl
。这应该会成功。
- 再次输入
exit
退出 cpan shell。
我在 Windows 10 平台上使用 Strawberry Perl 构建 Tkx 模块时遇到问题。它在 Tcl 依赖项上失败。错误是:
Tcl.o:Tcl.c:(.text+0x65): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x15e): undefined reference to `__imp_Tcl_ListObjGetElements'
Tcl.o:Tcl.c:(.text+0x1fb): undefined reference to `__imp_Tcl_GetStringFromObj'
Tcl.o:Tcl.c:(.text+0x29a): undefined reference to `__imp_Tcl_GetByteArrayFromObj'
Tcl.o:Tcl.c:(.text+0x4bf): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x538): undefined reference to `__imp_Tcl_NewDoubleObj'
Tcl.o:Tcl.c:(.text+0x58f): undefined reference to `__imp_Tcl_NewStringObj'
Tcl.o:Tcl.c:(.text+0x5d7): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x621): undefined reference to `__imp_Tcl_NewListObj'
Tcl.o:Tcl.c:(.text+0x643): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6a1): undefined reference to `__imp_Tcl_NewObj'
Tcl.o:Tcl.c:(.text+0x6af): undefined reference to `__imp_Tcl_ListObjAppendElement'
Tcl.o:Tcl.c:(.text+0x6d1): undefined reference to `__imp_Tcl_NewIntObj'
Tcl.o:Tcl.c:(.text+0x786): undefined reference to `__imp_Tcl_NewByteArrayObj'
Tcl.o:Tcl.c:(.text+0x839): undefined reference to `__imp_Tcl_WrongNumArgs'
还有很多很多类似的错误。我搜索了一下,但我什至没有找到任何东西。 Strawberry Perl 版本是5.26.4,我做了推荐的
cpan Tkx
我尝试自己构建 Tcl 模块时遇到同样的错误:
cpan Tcl
我安装了 ActiveTcl,但 Strawberry Perl 似乎没有看到它。
如何获得适用于 Strawberry Perl 的可用 Tcl 模块?
我设法让构建在 Strawberry Perl 5.26 上运行。 (与 5.24 捆绑在一起的 binutils 包似乎有一个错误,导致它无法识别来自 Tcl 的 .lib
文件。)
问题似乎是
Warning (mostly harmless): No library found for -ltcl86
在香草版本中,因为该库绝对是必需的。我的C:\ActiveTcl\lib
里面确实没有tcl86.lib
,但是有一个tcl86t.lib
.
所以...
- 运行
cpan
。这会让你进入 cpan shell. - 运行
look Tcl
。这将下载 Tcl 模块(如果需要)并将您放入构建目录中的 cmd shell。 - 使用您喜欢的编辑器编辑
Makefile.PL
。 在第 183 行附近应该有一行说:
$libpath .= " -ltcl$buildtype$tclver";
在其后添加一行:
$libpath .= "t";
保存并退出编辑器。
- 运行
perl Makefile.PL
。它现在应该使用-ltcl86t
. - 在 cmd shell 中键入
exit
返回到 cpan shell。 - 运行
install Tcl
。这应该会成功。 - 再次输入
exit
退出 cpan shell。