gpt4 book ai didi

c++ - 为什么包含-fPIC 编译静态库会导致运行时出现段错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:11 25 4
gpt4 key购买 nike

我正在使用 g++ 编译 C++ 静态库并使用 -fPIC 选项。我必须使用 -fPIC 选项,因为最终这个库将与其他静态库链接以形成动态库。

当我在本地测试静态库时,如果不包含 -fPIC 选项,它会完全正常工作。但是,一旦我使用 -fPIC 编译库,我就会在调用其中一个函数时在运行时收到段错误。

在编译静态库时包含-fPIC 会导致运行时出现段错误的原因是什么?

最佳答案

动态库应该在运行时加载,因此不能有位置相关的代码。

另一方面,静态库只是目标文件的存档。

当链接一个动态库时,链接器会在可执行文件中添加库的名称,这样加载器在加载程序时就可以加载它。当链接器链接静态库时,它基本上会提取目标文件并像任何其他目标文件一样链接它们。

因此,除非您创建一个所有其他目标文件都与位置无关的可执行文件(您使用 -fPIC 作为程序代码),否则您无法链接到使用位置的静态库 -独立代码,生成的可执行文件根本就没有为它设置。

关于c++ - 为什么包含-fPIC 编译静态库会导致运行时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com