我正在开发一个 C++ 项目,它使用foo.a
在旧的 Intel 32 位架构(使用gcc-4 )上编译的(遗留)静态库(让我们命名它)。我没有这个库的源代码,所以我无法重建它。
现在我必须使用gcc-6.5将整个项目移植到基于x86-64 linux 的环境中,并且在第一阶段,我尝试使用flag 编译所有内容,以便不更改任何内容。-m32
编译阶段进展顺利,但在链接阶段我收到此警告:
ld: (foo.a)(x.o) relocation of read-only section '.ro-data'
ld: warning: creating a DT_TEXTREL in object.
无论如何,可执行文件已创建,但此时我无法对其进行测试(是的,我知道,这似乎是一场灾难!)。
我读到了一些关于在构建时缺少-fPIC
标志以及在旧的32 位架构上该选项是不必要foo.a
的事实。-fPIC
我的问题是:
- 是什么
DT_TEXTREL
?我找不到关于这个术语的任何文档,只有手册上的片段。 - 如何在不重新编译的情况下解决这个问题
foo.a
? - 如果(问题 2)无法实现,我应该通过忽略此警告对最终可执行文件期待什么问题?
谢谢!