我想升级到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”使用默认链接器?
答案 0 :(得分:0)
这取决于您的Makefile
(可以使用remake
-x
进行调试)。请注意,make
有很多内置规则。使用make -p
也可以打印它们。请注意提及LINK.c
或LINK.cc
等的规则,并注意LD
的使用率不高。还请注意,ld
几乎从未直接使用过(大多数时候,其他程序,例如gcc
或g++
运行它)。
这也是PATH
variable的问题。因此,请尝试进行设置,以使新ld
早于旧{1>}。
通常,您与gcc
或g++
程序链接(因此,重要的是GCC,而不是make
;请阅读有关Invoking GCC和{{ 3}}),然后gcc
或g++
将运行链接器(您可以,但我不建议更改其its -fuse-ld=
,该链接用于控制{ {1}}或gcc
只是其他程序(例如g++
,cc1
,as
,spec file等的驱动程序 ...)。要了解ld
或gcc
正在运行什么程序,请将其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 }},但实际上您的系统上还有许多其他旧程序。
升级发行版所需的时间少于升级,编译,安装和配置每个工具的时间。