0

我正在尝试加载一个简单的 TCL 扩展,但我不断收到以下错误:

无法加载文件“libfoo.so”:ld.so.1:tclsh8.4_64:致命:libfoo.so:打开失败:没有这样的文件或目录

我正在使用TCL 手册页中的示例, 但我不确定我在这里做错了什么。我正在使用以下方法在 Solaris 上编译库:

cc -KPIC -c -I/opt/external/tcl-8.5.8/include foo.c
cc -shared -R/opt/external/tcl-8.5.8/i386/lib -L/opt/external/tcl-8.5.8/i386/lib -o libfoo.so foo.o

有人可以建议如何调试问题吗?

4

1 回答 1

0

这里有两个问题。

  1. 您传递给的库的文件名load可能应该有一个目录分隔符。当存在目录分隔符时,会抑制操作系统对库的搜索,这就是您想要的样子,因为您已经知道它在哪里。
  2. 您似乎正在尝试load将库转换为比它链接的旧版本的 Tcl。(您可能还试图将 32 位构建加载到 64 位可执行文件中。)这几乎不可能奏效。链接到您希望支持的最旧版本的 Tcl;在开发时,最好通过链接您要加载到的确切版本的 Tcl 来完成,对于生产,您应该查看Tcl_InitStubs 手册页以获取详细信息。
于 2012-07-25T08:39:08.650 回答