在Ubuntu x64上链接静态Boost::Python库出错

0 投票
1 回答
948 浏览
提问于 2025-04-17 13:06

我一直在尝试为x64的Linux系统构建一个小的Python模块,使用的是运行时链接和静态链接的配置,但不幸的是一直没有成功。我在Ubuntu x64 10.04上,使用的是gcc 4.4.3和Python 2.6.5环境,使用的是Boost::Python v.1.47。

我手动使用b2构建了Boost::Python,没有遇到问题,设置的选项如下:

toolset=gcc variant=release address-model=64 link=static runtime-link=static

接下来,我尝试使用bjam来构建我的模块(pydsrc.cpp),使用的是相同的选项,但在gcc链接阶段失败了。下面是构建阶段的最后几行信息:

...
gcc.compile.c++ ../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/object/function_doc_signature.o
gcc.archive ../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/libboost_python.a
gcc.link.dll bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.so
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.3/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

"g++"    -o "bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.so" -Wl,-h -Wl,pydsrc.so -shared -Wl,--start-group "bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.o" 
 "../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/libboost_python.a"   -lutil -lpthread -ldl   -Wl,--end-group -static -m64

在Win7 x64上,我使用msvc9工具集编译时没有遇到太大困难,但在Ubuntu上却无法成功。有没有人遇到过类似的问题,或者知道可能的解决方案?任何帮助或提示,关于如何正确构建这个模块,我都非常感激。

谢谢

1 个回答

1

试着通过cxxflags指令来包含PIC(位置无关代码)编译标志。也就是说,在你的情况下,可以这样写:

toolset=gcc variant=release address-model=64 cxxflags=-fPIC link=static runtime-link=static

撰写回答