【问题标题】:How to compile static library with -fPIC from boost.python如何使用 boost.python 中的 -fPIC 编译静态库
【发布时间】:2012-09-07 06:48:02
【问题描述】:

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

【问题讨论】:

  • 动态库不需要PIC吗?
  • 但是我想构建一个动态库,链接一个从 boost.python 编译的静态库。

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


【解决方案1】:

您可以使用几个选项:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      相关资源
      最近更新 更多