I wanted to upgrade to binutils 2.26 , so i followed the steps here : How to convert default binutils into binutils-2.26? to solve the same "unrecognized relocation" error.
Now my default linker is 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.
But "make" still uses the "/usr/bin/x86_64-linux-gnu-ld" (which is 2.24) and still gives the same error.
So how to force "make" to use the default linker ?
It depends upon your Makefile
(which you could debug with remake
-x
). Notice that make
has a lot of builtin rules. Use make -p
to also print them. Notice the rules mentioning LINK.c
or LINK.cc
etc, and notice that LD
is not much used. Notice also that ld
is almost never used directly (most of the time, some other program like gcc
or g++
runs it).
And it is also a matter of the PATH
variable. So try setting it so that your new ld
comes before the old one.
Generally, you link with the gcc
or g++
program (so it is GCC which matters, not make
; read about Invoking GCC and its -fuse-ld=
), and that gcc
or g++
will run the linker (you might, but I don't recommend to, change its spec file which governs what actual programs are run by gcc
or g++
which are only drivers to other programs such as cc1
, as
, ld
, collect2
etc...). To understand what programs gcc
or g++
is running, pass it the -v
flag.
But "make" still uses the "/usr/bin/x86_64-linux-gnu-ld" (which is 2.24) and still gives the same error.
On my Debian system /usr/bin/x86_64-linux-gnu-ld
(it is generally started by gcc
, not directly by make
) is a symlink. You might (but I don't recommend that) just change that symlink.
BTW, you are using an ancient Ubuntu 14. You'll better upgrade your entire distribution (e.g. to Ubuntu 18.04.1 LTS at end of 2018), because there is not only ld
but many other programs which are really old on your system.
Upgrading your distribution will take less time than upgrading, compiling, installing and configuring each individual tool.