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

xzv2uavs  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(135)

默认情况下,libboostpython.a在编译时不使用-fPIC。但是我必须做一个python扩展,它是一个动态库,-fPIC链接到静态库。如何从boost.python编译-fPIC静态库(libboostpython.a)?

wgxvkvu9

wgxvkvu91#

您可以使用以下几个选项:

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

yqyhoc1h2#

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

./bjam clean && 
./bjam -d+2 link=static cxxflags="-fPIC" install
s2j5cfk0

s2j5cfk03#

如果你手动编译它,应该可以这样做:
g++ -fPIC -shared -I/usr/include/ -I/usr/include/python3 main.cpp -lpython3 -lboost_python3 -o example.so

相关问题