编译c++;使用TCL/TK8.4的应用程序,以便它可以在使用TCL/TK8.5的系统上运行? 我有一个C++应用程序,它充当TCL/TK的解释器。 tms是根据TCL/TK8.4编译的

编译c++;使用TCL/TK8.4的应用程序,以便它可以在使用TCL/TK8.5的系统上运行? 我有一个C++应用程序,它充当TCL/TK的解释器。 tms是根据TCL/TK8.4编译的,c++,compilation,tcl,tk,C++,Compilation,Tcl,Tk,我需要在一个只安装了TCL/TK8.5的环境中运行它 在TCL/TK8.5系统上运行应用程序时,出现以下错误: tms: error while loading shared libraries: libtk8.4.so: cannot open shared object file: No such file or directory tms是使用g++和-ltcl8.4和-ltk8.4标志在Linux机器上编译的。如果将应用程序与8.4库链接,则必须有8.4共享对象才能运行应用程序。您应该

我需要在一个只安装了TCL/TK8.5的环境中运行它

在TCL/TK8.5系统上运行应用程序时,出现以下错误:

tms: error while loading shared libraries: libtk8.4.so: cannot open shared object file: No such file or directory

tms是使用g++和-ltcl8.4和-ltk8.4标志在Linux机器上编译的。

如果将应用程序与8.4库链接,则必须有8.4共享对象才能运行应用程序。您应该将可执行文件以及所有必需的tcl库和脚本作为一个包提供

话虽如此,但事实上,你所说的是有可能做到的。stubs机制允许将Tcl扩展加载到Tcl的hight版本中,而不是编译它们所依据的版本,可以扩展到托管Tcl解释器的可执行文件中使用。有关更详细的讨论,请参阅,但您可以安排动态加载Tcl共享库,并使用存根机制对其进行初始化。那页上有一个例子。但是,这样做可能会导致安装的Tcl版本缺少应用程序期望的内容。如果您坚持嵌入Tcl的标准路线,在这里您可以发布应用程序以及所需的所有Tcl文件,那么您可以将应用程序与特定于系统的变体隔离开来


另一种可能是将应用程序链接到一个dll/共享库,该库包括一个包含所有支持Tcl脚本的虚拟文件系统。最初称为basekit DLL,也称为basekit DLL。这样就可以将可执行文件链接到单个dll/。这样就可以保存所有依赖于Tcl的信息。

在编译系统上创建到共享对象的“通用”软链接(libtcl.so-->libtcl8.4.so)并在运行系统上创建类似的软链接(libtcl.so-->libtcl8.5.so)是否可行?然后我可以使用-ltk和-ltcl(而不是ltcl8.4和ltcl8.5)编译吗?只有当您希望应用程序以奇怪而有趣的方式崩溃时。链接到8.4时,得到的结构的大小为8.4。在8.5中,某些地方的内部数据结构会发生变化,最终会在结构末端的随机内存上进行调用。@empollonefisica如果您正在制作嵌入Tcl的可再发行应用程序,最好是静态链接到您构建的版本,或者使用basekit之类的工具。为自己做额外的工作毫无意义。(请注意,我实际上不建议再使用8.4;它在去年就不再受支持了。)