2

我正在使用binutils-2.24 中的Gold 链接器来链接目标应用程序: i686-pc-linux-gnu 。

当我在 i686-pc-linux-gnu 机器上运行 Gold 时出现虚拟内存不足错误,所以我在 x86_64-linux-gnu 主机上构建它(以获得更多虚拟内存),然后我正在运行它这台机器也是如此,但我用它来链接我的目标应用程序:i686-pc-linux-gnu。

第一个链接是成功的——我还没有可执行文件——所以 Gold 恢复为 --incremental-full 并且我得到了一个可以在我的 i686-pc-linux-gnu 机器上成功运行的可执行文件:

gold-ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn.o /usr/lib32/crt1.o main.o try.o -lc --incremental

* stam32: stat: 没有这样的文件或目录与--incremental-full 链接*

‎第二个链接失败并出现以下错误:

../objs-binutils-2.24/gold/ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn。 o /usr/lib32/crt1.o main.o try.o -lc --incremental

../objs-binutils-2.24/gold/ld:init_got_plt_for_update 中的内部错误,位于 ../../binutils-2.24/gold/target.h:949

我查看了源代码,发现“init_got_plt_for_update”仅针对 x86_64 和 tilegx 实现。对于其他目标 init_got_plt_for_update 只需调用 gold_unreachable() 即可退出 gold 并出现错误。

另一方面 - 关于 Gold 的增量链接 ( https://video.linux.com/videos/incremental-linking-with-gold ) 有一个完整的讲座,其中特别提到了 i386,作为 Gold 支持的目标,以及演讲者没有提到对 i386 目标使用 --incremental 标志的任何限制(据我所知 i686-pc-linux-gnu 是 i386 目标)。

那么有人知道为什么我的增量链接失败了吗?

提前致谢, Galit Keret

4

1 回答 1

0

在 binutils 邮件列表中询问和回答:

目前没有对黄金 i386 目标的增量链接支持。

于 2014-03-13T13:55:51.470 回答