How to compile static library with -fPIC from boost.python(如何使用 boost.python 中的 -fPIC 编译静态库)
问题描述
默认情况下,libboostpython.a
是在没有 -fPIC
的情况下编译的.但我必须制作一个 python 扩展,它是一个动态库,带有 -fPIC
链接到静态库.如何使用 boost.python
中的 -fPIC
编译静态库 (libboostpython.a
)?
By default, libboostpython.a
is compiled without -fPIC
. But I have to make a python extension and it is a dynamic library with -fPIC
that links to static libraries.
How can I compile a static library (libboostpython.a
) with -fPIC
from boost.python
?
推荐答案
您可以使用以下几个选项:
There are a couple options you could use:
- 从源代码编译 boost 并将额外的编译器选项传递给 bjam.例如.
bjam ... cxxflags='-fPIC'
.这会将每个 boost 源文件编译为位置无关代码. - 以共享库的形式使用boost.在这种情况下,您可能希望随应用程序一起提供 boost 共享库,以确保使用适当版本的 boost.您可以使用
'-Wl,-rpath,$ORIGIN'
标志链接您的可执行文件,这样当动态链接器搜索您的可执行文件所需的共享库时,它会在可执行文件所在的目录中查找它们.请参阅man ld.so有关$ORIGIN
的更多详细信息.
- Compile boost from source and pass extra compiler options to bjam. E.g.
bjam ... cxxflags='-fPIC'
. That would compile every boost source file as position independent code. - Use boost in the form of shared libraries. In this case you probably want to ship boost shared libraries along with your application to make sure the appropriate version of boost is used. You can link your executable with
'-Wl,-rpath,$ORIGIN'
flag, so that when the dynamic linker searches for shared libraries required by your executable it looks for them in the directory where the executable is. See man ld.so for more details on$ORIGIN
.
这篇关于如何使用 boost.python 中的 -fPIC 编译静态库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 boost.python 中的 -fPIC 编译静态库
基础教程推荐
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01