将静态库链接到Boost Python(共享库) - 导入错误
我正在构建一个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 个回答
我假设这是在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