将静态库链接到Boost Python(共享库) - 导入错误

4 投票
1 回答
1950 浏览
提问于 2025-04-16 03:00

我正在构建一个Boost Python模块(.so共享库文件),这个模块依赖于另一个外部库(STXXL)。

虽然我可以成功构建和导入示例的Boost Python模块,但当我把STXXL加进来的时候,就遇到问题了。具体来说,就是在Python中运行import fast_parts时出现了错误。

我收到的错误信息是ImportError: ./fast_parts.so: undefined symbol: _ZN5stxxl10ran32StateE

这让我觉得STXXL库没有被正确链接,但我不太明白为什么会这样,因为我确实在链接它,而且链接器也没有给我任何错误提示。值得一提的是,我可以成功构建和运行使用STXXL的独立程序,至于我所知道的,这些库是存储在下面显示的lib目录中的.a归档文件里。我把我的Makefile简化成了一个命令,如下所示:

g++ -I/home/zenna/Downloads/stxxl-1.3.0/include -include stxxl/bits/defines.h -I/home/zenna/local/include -I/usr/include/python2.6 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -O3 -Wall -g -DFOO=BAR -pthread -L/home/zenna/Downloads/stxxl-1.3.0/lib/ -lstxxl -L/home/zenna/local/lib/ -lboost_python -lpython2.6 -fPIC -shared -o fast_parts.so partition.cpp

有什么建议吗?

1 个回答

0

我假设这是在Linux系统上,如果不对请留言告诉我。你运行ldd命令查看libfast_parts.so的输出结果是什么样的?这个结果是否显示找不到libstxxl.so

你可能需要把/home/zenna/Downloads/stxxl-1.3.0/lib/这个路径添加到你的LD_LIBRARY_PATH环境变量中,或者在libfast_parts.so的rpath里加上这个路径。

-Wl,-rpath,/home/zenna/Downloads/stxxl-1.3.0/lib -L/home/zenna/Downloads/stxxl-1.3.0/lib -lstxxl

撰写回答