“ make”如何确定使用哪个链接器?

时间:2018-12-27 09:30:23

标签: makefile linker ubuntu-14.04 binutils

我想升级到binutils 2.26,所以我按照此处的步骤操作:How to convert default binutils into binutils-2.26?,以解决相同的“无法识别的重定位”错误。

现在我的默认链接器是2.26

$ ld --version


GNU ld (GNU Binutils for Ubuntu) 2.26.1
Copyright (C) 2015 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) a later version.
This program has absolutely no warranty.

但是,“ make”仍然使用“ / usr / bin / x86_64-linux-gnu-ld”(即2.24),并且仍然会出现相同的错误。

那么如何强制“ make”使用默认链接器?

1 个答案:

答案 0 :(得分:0)

这取决于您的Makefile(可以使用remake -x进行调试)。请注意,make有很多内置规则。使用make -p也可以打印它们。请注意提及LINK.cLINK.cc等的规则,并注意LD的使用率不高。还请注意,ld几乎从未直接使用过(大多数时候,其他程序,例如gccg++运行它)。

这也是PATH variable的问题。因此,请尝试进行设置,以使新ld早于旧{}。

通常,您与gccg++程序链接(因此,重要的是GCC,而不是make;请阅读有关Invoking GCC和{{ 3}}),然后gccg++将运行链接器(您可以,但我不建议更改其its -fuse-ld=,该链接用于控制{ {1}}或gcc只是其他程序(例如g++cc1asspec file等的驱动程序 ...)。要了解ldgcc正在运行什么程序,请将其collect2传递给它。

  

但是,“ make”仍然使用“ / usr / bin / x86_64-linux-gnu-ld”(即2.24),并且仍然会出现相同的错误。

在我的Debian系统g++(通常由/usr/bin/x86_64-linux-gnu-ld启动,而不是直接由gcc启动)是一个符号链接。您可以(但我不建议这样做)只是更改该符号链接。


顺便说一句,您正在使用古老的Ubuntu14。您最好升级整个发行版(例如,在2018年底升级到-v flag),因为不仅存在{{1 }},但实际上您的系统上还有许多其他旧程序。

升级发行版所需的时间少于升级,编译,安装和配置每个工具的时间。

相关问题