首页 > 解决方案 > DT_TEXTREL 是什么意思,如何解决?

问题描述

我正在开发一个 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

我的问题是:

  1. 是什么DT_TEXTREL?我找不到关于这个术语的任何文档,只有手册上的片段。
  2. 如何在不重新编译的情况下解决这个问题foo.a
  3. 如果(问题 2)无法实现,我应该通过忽略此警告对最终可执行文件期待什么问题?

谢谢!

标签: c++x86-64static-librariesldlinker-warning

解决方案


推荐阅读