g++将静态库链接到动态库(不带-fPIC)
g++ linking a static library into a dynamic library (without -fPIC)
我正试图使用将g++静态库(staticLib.a)链接到动态库(dynamicLib.so)中
g++ *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so
我得到了和这里相同的错误:
/usr/bin/ld:staticLib.a(object.o):针对R_X86_64_32重新定位`在创建共享对象时不能使用.rodata;使用重新编译-fPIC staticLib.a(object.o):添加符号时出错:错误的值集合2:错误:ld返回1退出状态
我读了几个主题,但找不到我想要的答案。staticLib.a未编译为位置无关代码(PIC)。根据上面的链接,这似乎是强制性的。然而,staticLib.a是另一个我无法控制的项目的库。
我的第一个想法是提取对象*.o using
Ar-x(如第二个链接所述)。但问题仍然存在,因为对象没有使用-fPIC
进行编译。
我的第二个想法是创建我自己的Makefile,在我的项目中用-fPIC
重新编译staticLib.a(我不想把现有的项目搞砸)。但我不确定这是一个好方法…
因此,我的问题如下:有没有任何可能的方法将静态库(在没有-fPIC
的情况下编译)链接到动态库
相关主题:
我可以通过链接静态库来构建共享库吗?
将静态库链接到共享库
如何在gcc-中将静态库链接到动态库
"重新定位R_ X86_64_32S对抗";链接错误
所以我的问题如下:有没有任何可能的方法将静态库(在没有-fPIC的情况下编译)链接到动态库?
由于提供与位置无关的代码需要编译,因此实际上不可能更改已编译的代码。从理论上讲,您可以从二进制代码中反向工程源代码并重新编译,但这将是完全无效的解决方案。所以您必须(重新)编译传递了-fPIC的原始项目。
- 使用不带参数的函数访问结构元素
- 不带大括号的枚举形式
- 将静态库链接到不带-fPIC的共享库中
- 检查不带转换的扫描格式
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 不带预处理器的调用方法/文件的文件名/行号
- 如何打印不带空格的输入整数?
- 带<T>或不带 (C++) 的类模板
- 声明C++数组(带或不带 "new" 关键字)
- 不带轮询的 SDL2 事件回调
- 多个'if'语句,不带'else'
- 使用不带缓冲区变量的冲刺
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 打印标准::<char>不带无关字符的矢量
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 调用多个类而不带 if 语句
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- 删除动态数组上不带方括号的内容
- 定义不带大小或零大小的数组
- g++将静态库链接到动态库(不带-fPIC)