繁体   English   中英

将静态库链接到共享库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM