gpt4 book ai didi

linux - 将静态库链接到共享库

转载 作者:太空狗 更新时间:2023-10-29 11:42:20 25 4
gpt4 key购买 nike

我正在尝试在 Ubuntu Linux 上使用 g++ 5.4.0 创建一个共享库。

我已经构建了 Poco C++ 库的静态库(.a 文件),我想将它们静态链接到我的共享库中。

但它不起作用。

我已将以下字符串添加到我的构建脚本中:

-Wl,-whole-archive -lPocoFoundation -Wl,-no-whole-archive

g++ 提示以下错误信息:

relocation R_X86_64_32S against '-ZTVN4Poco15ArchiveStrategyE' can not be used when making a shared object; recompile with -fPIC

有人可以帮忙吗?

最佳答案

按照编译器的建议执行:使用 -fPIC 重新编译

说明:共享对象有要求,它们代码中的地址不依赖于二进制图像在地址空间中的内存布局。静态链接代码不受此约束,虚拟地址空间中的所有地址在链接时都是已知的,因此代码不需要处理编译时未确定的位置。

-fPIC 编译器标志允许编译P位置独立独立Code (PIC)。您尝试链接的静态库未编译为 PIC,这就是链接器提示的原因。解决方案是重新编译启用 PIC 的静态库。


附带说明:PIC 也是地址空间布局随机化 (ASLR) 的基础,ASLR 是一种安全措施,旨在使易受攻击的程序的利用变得更加困难。

关于linux - 将静态库链接到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531837/

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