Con*_*ood 3 c++ compilation shared-libraries static-libraries fpic
我正在使用 g++ 并使用 -fPIC 选项编译 C++ 静态库。我必须使用 -fPIC 选项,因为最终该库将与其他静态库链接以形成动态库。
当我在本地测试静态库时,当我不包含 -fPIC 选项时,它完全正常工作。但是,只要我使用 -fPIC 编译库,在运行时调用其中一个函数时就会收到分段错误错误。
包含 -fPIC 编译静态库的原因可能会导致运行时出现分段错误?
动态库应该在运行时加载,因此不能包含与位置相关的代码。
另一方面,静态库只是目标文件的存档。
当与动态库链接时,链接器在可执行文件中添加了库的名称,以便加载器在加载程序时加载它。当链接器与静态库链接时,它基本上像任何其他目标文件一样提取目标文件并与它们链接。
因此,除非您创建一个可执行文件,其中所有其他目标文件都与位置无关(您-fPIC
用于程序代码),否则您无法链接使用位置无关代码的静态库,生成的可执行文件根本没有设置为它。
归档时间: |
|
查看次数: |
4076 次 |
最近记录: |