Tclkit/Starkit 在 ubuntu 上带有共享库

问题描述 投票:0回答:1

在我的 tcl 工具中,我使用文件 .so + pkgIndex.tcl 形式的二进制共享库,然后使用

package require
加载实际的包。它在我的机器上工作得很好,但是当我尝试将它打包到 Starpack 中时,当我尝试加载该包时它会抛出错误:
couldn't load file "/tmp/tcl_MI8NvK":/tmp/tcl_MI8NvK: undefined symbol: Tcl_AppendResult
纯 tcl 中的程序的其余部分工作正常。 看起来我错过了一些重要的图书馆,但不确定是哪一个。 如果我编译我的共享库并包含 /usr/lib/x86_64-linux-gnu/libtcl8.6.a 它给了我另一个错误:
couldn't load file "/tmp/tcl_4cwr95":/tmp/tcl_4cwr95: undefined symbol: inflate

我使用纯 C 和 SWIG 生成 C 库的包装器代码。我还使用标志 -DUSE_TCL_STUBS 运行 SWIG。 预先感谢您。

附注全部包含在 C 代码中:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "filter.h"
#include <stddef.h>
#include <tcl.h>
#include <errno.h>
#include <stdarg.h>
#include <ctype.h>

我没有看到这里有什么需要额外照顾的...

tcl
1个回答
0
投票

当您使用

-DTCL_USE_STUBS
构建可加载库时,您还 need 链接到 Tcl 存根库(以绑定特定的 ABI;存根库包含 ABI 绑定器)并在任何操作之前调用
Tcl_InitStubs
其他调用(以完成 ABI 绑定)。

非 Tcl(和非 Tk)库大多对存根机制一无所知,因此需要静态链接或在目标运行时环境中动态查找。

© www.soinside.com 2019 - 2024. All rights reserved.