我正在尝试在 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
说明:共享对象有这样的要求:其代码中的地址不依赖于地址空间中二进制映像的内存布局。静态链接代码不受此约束,虚拟地址空间中的所有地址在链接时都是已知的,因此代码不需要处理编译时未确定的位置。
The -fPIC
编译器标志启用编译Position I独立的C颂歌(PIC)。您尝试链接的静态库未编译为 PIC,这就是链接器抱怨的原因。解决方案是在启用 PIC 的情况下重新编译静态库。
附带说明:PIC 也是地址空间布局随机化 (ASLR) 的基础,这是一种安全措施,其目标是使易受攻击的程序更难被利用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)