【问题标题】:How to package Tcl libraries in my own program?如何在我自己的程序中打包 Tcl 库?
【发布时间】:2012-10-17 09:32:41
【问题描述】:
在我的 c++ 程序中,我使用了 Tcl 库并链接了 libtcl8.5.so,但是目标主机没有 tcl8.5,所以我复制了包含 init 的 libtcl8.5.so 和 tcl8.5 目录。 tcl 那里,并将环境变量 TCLLIBPATH 设置为 path/to/copied/tcl8.5,但是当我的程序调用 Tcl_Init 时,它失败并说“包未知”。
复制的 tcl8.5/ 似乎无法正确初始化。
我该如何解决这个问题?
【问题讨论】:
标签:
package
tcl
portability
init
【解决方案1】:
如果您更改脚本库目录的位置(在您的情况下为tcl8.5/),您需要告诉 Tcl 的共享库部分它在哪里。您可以使用TCL_LIBRARY 环境变量来执行此操作,如果设置该变量应该包含absolute 路径,该路径是该目录的位置(从技术上讲,是包含init.tcl 的目录)。
在 Tcl 的正常安装中,该目录的正确位置直接烘焙到共享库中,但是当您移动内容时(或者当您运行 Tcl 的 make test 时),环境变量允许您覆盖。
您可能希望研究替代包装机制;在tcl 标签中已经有一些关于这个问题的问题(但通常最喜欢的——starkit——可能不适合你的情况,因为程序主要是 C++)。
【讨论】:
-
您可以使用 basekit dll 或 stardll (wiki.tcl.tk/15969)。在那里,您可以将 C++ 应用程序链接到一个 dll,该 dll 还包括一个包含任何所需脚本的 VFS。默认情况下,这样的实体已经包含 Tcl 核心脚本。