我正在使用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