在我的c++程序中,我使用了Tcl库并链接了libtcl8.5.so,但是目标主机没有tcl8.5,所以我复制了libtcl8.5.so和tcl8.5目录,其中包含init.tcl,并将环境变量 TCLLIBPATH 设置为 path/to/copied/tcl8.5,但是当我的程序调用 Tcl_Init 时,它失败并说“包未知”。
似乎复制的 tcl8.5/ 无法正确初始化。我怎么解决这个问题?
在我的c++程序中,我使用了Tcl库并链接了libtcl8.5.so,但是目标主机没有tcl8.5,所以我复制了libtcl8.5.so和tcl8.5目录,其中包含init.tcl,并将环境变量 TCLLIBPATH 设置为 path/to/copied/tcl8.5,但是当我的程序调用 Tcl_Init 时,它失败并说“包未知”。
似乎复制的 tcl8.5/ 无法正确初始化。我怎么解决这个问题?
如果您更改脚本库目录的位置(tcl8.5/
在您的情况下),您需要告诉 Tcl 的共享库部分它在哪里。您可以使用TCL_LIBRARY
环境变量执行此操作,如果设置了该变量,则该变量应包含作为该目录位置的绝对路径(从技术上讲,是包含 的目录init.tcl
)。在 Tcl 的正常安装中,该目录的正确位置被直接烘焙到共享库中,但是当您移动内容时(或者当您运行 Tcl 时make test
),环境变量允许您覆盖。
您可能希望研究替代包装机制;tcl标签中已经有一些关于这个问题的问题(但通常最喜欢的——starkit——可能不适合你的情况,因为程序主要是 C++)。