重命名符号失败并出现错误

Renaming symbols fails with errors

我已经安装了新的 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.

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

恐怕 Binutils 2.20 太旧了。 (已经 9 岁了。)关于 v2.25 /.26 引入了对重定位类型 42 的支持。