【问题标题】:Linking a static library into Boost Python (shared library) - Import Error将静态库链接到 Boost Python(共享库) - 导入错误
【发布时间】:2011-03-31 21:22:40
【问题描述】:

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

虽然我可以构建和导入示例 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

有什么建议吗?

【问题讨论】:

    标签: c++ python boost linker compilation


    【解决方案1】:

    我假设是 Linux,如果这不正确,请发表评论。 libfast_parts.soldd 输出是什么样的?是不是表示libstxxl.so没有找到?

    您可能需要在LD_LIBRARY_PATHlibfast_parts.so 的rpath 中添加/home/zenna/Downloads/stxxl-1.3.0/lib/

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

    【讨论】:

    • so fast_parts.so 是最终的输出模块。它的ldd不需要libstxxl.so,因为libstxxl不存在,唯一存在的文件是stxxl.a,它是.o静态库文件的存档。似乎缺少的符号 _ZN5stxxl10ran32StateE 包含在存档中包含的文件 rand.libstxxl.o 中(使用 nm 工具找到),但是当我在实际存档上运行 nm 时没有显示。我不确定这是否相关
    • 实际上这不是真的 nm on fast_parts 显示 fast_part.so:0001eec0 t _GLOBAL__I__ZN5stxxl10ran32StateE
    • 您的链接看起来有些奇怪,您可能想尝试使用-lstxxl 的顺序以及任何需要从中定义符号的目标文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多