如何使用boost.python中的-fPIC编译静态库

时间:2012-09-14 05:51:36

标签: c++ python c boost boost-python

默认情况下,libboostpython.a编译时没有-fPIC。但我必须创建一个python扩展,它是一个动态库,-fPIC链接到静态库。 如何从libboostpython.a编译带-fPIC的静态库(boost.python)?

2 个答案:

答案 0 :(得分:17)

您可以使用几种选项:

  • 从源代码编译boost并将额外的编译器选项传递给bjam。例如。 bjam ... cxxflags='-fPIC'。这会将每个boost源文件编译为与位置无关的代码。
  • 以共享库的形式使用boost。在这种情况下,您可能希望将boost共享库与应用程序一起发布,以确保使用适当的boost版本。您可以将可执行文件与'-Wl,-rpath,$ORIGIN'标志链接起来,这样当动态链接器搜索可执行文件所需的共享库时,它会在可执行文件所在的目录中查找它们。有关$ORIGIN
  • 的详细信息,请参阅man ld.so

答案 1 :(得分:1)

请注意,如果您需要先清除目标,则已经运行了bjam 通过应用-d + 2:

来打印命令也很有帮助
./bjam clean && 
./bjam -d+2 link=static cxxflags="-fPIC" install