我正在尝试加载一个简单的TCL扩展,但我不断收到以下错误:
couldn't load file "libfoo.so": ld.so.1: tclsh8.4_64: fatal: libfoo.so: open failed: No such file or directory
我正在使用TCL man page中的示例 但我不确定我在这里做错了什么。我正在使用以下代码编译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
有人可以就如何调试问题提出建议吗?
答案 0 :(得分:0)
这里有两个问题。
load
的库的文件名应该包含目录分隔符。当存在目录分隔符时,这会阻止操作系统搜索库,这就是你想要的东西,因为你已经知道了它的位置。load
库转换为旧版本的Tcl,而不是链接到它。 (您可能还尝试将32位版本加载到64位可执行文件中。)消失的 不太可能正常工作。链接您希望支持的最旧版本的Tcl;在开发时,最好通过链接到您要加载的Tcl的确切版本来完成,并且对于生产,您应该看到Tcl_InitStubs联机帮助页以获取详细信息。