【发布时间】:2017-05-24 07:47:39
【问题描述】:
我正在尝试使用 g++ 将静态库 (staticLib.a) 链接到动态库 (dynamicLib.so) 中:
g++ *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so
我得到了和here一样的错误:
/usr/bin/ld: staticLib.a(object.o): 重定位 R_X86_64_32 反对 制作共享对象时不能使用`.rodata';重新编译 -fPIC staticLib.a(object.o):添加符号时出错:错误值 collect2:错误:ld 返回 1 退出状态
我阅读了几个主题,但找不到我正在寻找的答案。 staticLib.a 未编译为位置无关代码 (PIC)。根据link above,这似乎是强制性的。但是,staticLib.a 是来自另一个项目的库,我无法控制。
我的第一个想法是提取对象*.o usingar -x(如in this second link 所述)。但是问题仍然存在,因为对象没有使用-fPIC 编译。
我的第二个想法是创建自己的 Makefile 以在我的项目中使用 -fPIC 重新编译 staticLib.a(我不想弄乱现有项目)。但我不确定这是不是一个好方法......
所以我的问题如下:有没有办法将静态库(没有-fPIC 编译)链接到动态库?
相关主题:
【问题讨论】:
标签: c++ g++ static-linking dynamic-linking