【问题标题】:Renaming symbols fails with errors重命名符号失败并出现错误
【发布时间】:2020-09-14 16:54:46
【问题描述】:

我已经安装了新的 glib 库版本 2.6,创建后我尝试使用 objcopy 命令重命名 glib 库中的一些符号。为了我们的项目支持,重命名符号是必要的。

它失败并出现以下错误

objcopy --redefine-syms=glibrename libglib-2.0.a
BFD: libglib-2.0.a(deprecated_gcompletion.c.o): invalid relocation type 42
BFD: BFD version 2.20.51.0.2-5.36.el6 20100205 assertion fail elf64-x86-64.c:290
BFD: libglib-2.0.a(deprecated_gthread-deprecated.c.o): invalid relocation type 42
BFD: BFD version 2.20.51.0.2-5.36.el6 20100205 assertion fail elf64-x86-64.c:290
BFD: libglib-2.0.a(deprecated_gthread-deprecated.c.o): invalid relocation type 42
BFD: BFD version 2.20.51.0.2-5.36.el6 20100205 assertion fail elf64-x86-64.c:290
BFD: libglib-2.0.a(deprecated_gthread-deprecated.c.o): invalid relocation type 42
BFD: BFD version 2.20.51.0.2-5.36.el6 20100205 assertion fail elf64-x86-64.c:290
BFD: libglib-2.0.a(deprecated_gthread-deprecated.c.o): invalid relocation type 42
BFD: BFD version 2.20.51.0.2-5.36.el6 20100205 assertion fail elf64-x86-64.c:290
BFD: libglib-2.0.a(deprecated_gthread-deprecated.c.o): invalid relocation type 42

glibrename 是一个文件,其中定义了所有 glib 原始符号并重命名了我想做的符号。

示例文件内容为:

 glib_melloc test_glib_melloc
 glib_sym    test_glib_sym

这是我的objcopy 版本:

[kltest@il-kltest ~]$ objcopy --version
GNU objcopy version 2.20.51.0.2-5.36.el6 20100205
Copyright 2009 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
 This program has absolutely no warranty.

任何人请帮助我为什么遇到这个问题,有什么想法吗?

【问题讨论】:

  • 请编辑您的问题以向我们展示objcopy --version的输出
  • 迈克,我刚刚用版本更新了上面的描述。

标签: elf glib objcopy


【解决方案1】:

恐怕 Binutils 2.20 太旧了。 (已有 9 年历史。)在 v2.25 /.26 左右引入了对重定位类型 42 的支持。

【讨论】:

  • Mike,我们如何更改 Binutils 版本?您能否简要介绍一下相同的信息?如果它解决了我的问题,它会尝试。
  • @Naga 您的发行版的包管理器可能提供 >= 2.26 的版本。否则,您可以在具有更新的 binutils 的系统上尝试此objcopy 操作,并利用生成的libglib-2.0.a 把握机会。原则上,您始终可以从 source 构建 binutils。但这是针对专家的。 Binutils 与您的 OS + 版本密切相关,如果您无法使用发行版打包的二进制文件做您需要做的事情,我强烈怀疑您正在尝试做的事情被误导了。
猜你喜欢
  • 1970-01-01
  • 2022-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2018-02-24
相关资源
最近更新 更多