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.

所以...

  1. 运行cpan。这会让你进入 cpan shell.
  2. 运行look Tcl。这将下载 Tcl 模块(如果需要)并将您放入构建目录中的 cmd shell。
  3. 使用您喜欢的编辑器编辑 Makefile.PL
  4. 在第 183 行附近应该有一行说:

            $libpath .= " -ltcl$buildtype$tclver";
    

    在其后添加一行:

            $libpath .= "t";
    
  5. 保存并退出编辑器。

  6. 运行perl Makefile.PL。它现在应该使用 -ltcl86t.
  7. 在 cmd shell 中键入 exit 返回到 cpan shell。
  8. 运行install Tcl。这应该会成功。
  9. 再次输入 exit 退出 cpan shell。