[英]Linking a Static library into a shared library
我正在尝试在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 osition的汇编我 ndependentÇODE(PIC)。 您尝试链接的静态库未编译为PIC,这就是链接器抱怨的原因。 解决方案是在启用了PIC的情况下重新编译静态库。
附带说明:PIC还是地址空间布局随机化(ASLR)的基础,ASLR是一种安全措施,其目标是使对漏洞程序的利用更加困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.