14

默认情况下,libboostpython.a编译时没有-fPIC. 但我必须制作一个 python 扩展,它是一个动态库,带有-fPIC指向静态库的链接。如何使用from编译静态库 ( libboostpython.a) ?-fPICboost.python

4

2 回答 2

18

您可以使用几个选项:

  • 从源代码编译 boost 并将额外的编译器选项传递给 bjam。例如bjam ... cxxflags='-fPIC'。这会将每个 boost 源文件编译为与位置无关的代码。
  • 以共享库的形式使用 boost。在这种情况下,您可能希望将 boost 共享库与您的应用程序一起发布,以确保使用适当版本的 boost。您可以使用'-Wl,-rpath,$ORIGIN'标志链接您的可执行文件,以便当动态链接器搜索可执行文件所需的共享库时,它会在可执行文件所在的目录中查找它们。有关. _ _$ORIGIN
于 2012-09-14T08:05:12.233 回答
2

请注意,如果您在需要首先清除目标时已经运行 bjam,那么通过应用 -d+2 来打印命令也很有帮助:

./bjam clean && 
./bjam -d+2 link=static cxxflags="-fPIC" install
于 2017-12-17T14:39:21.437 回答