как "make" определяет, какой компоновщик использовать? - PullRequest
0 голосов
/ 27 декабря 2018

Я хотел обновить систему до binutils 2.26, поэтому я выполнил следующие шаги: Как преобразовать стандартные binutils в 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 голосов
/ 27 декабря 2018

Это зависит от вашего Makefile (который вы можете отладить с помощью remake -x).Обратите внимание, что make имеет много встроенных правил.Используйте make -p, чтобы также распечатать их.Обратите внимание на правила, в которых упоминаются LINK.c или LINK.cc и т. Д., И обратите внимание, что LD мало используется.Обратите также внимание на то, что ld почти никогда не используется напрямую (в большинстве случаев какая-то другая программа, например gcc или g++ запускает его).

И это также вопрос PATH переменная .Поэтому попробуйте установить его так, чтобы ваш новый ld предшествовал старому.

Как правило, вы связываетесь с программой gcc или g++ (поэтому значение имеет GCC ., не make; читайте о Вызов GCC и его -fuse-ld=), и что gcc или g++ будет запускать компоновщик (вы можете, но я неРекомендуется изменить его spec-файл , который определяет, какие фактические программы запускаются gcc или g++, которые являются только драйверами , на другие программы, такие как cc1, as, ld, collect2 и т. Д.).Чтобы понять, какие программы gcc или g++ запущены, передайте ему флаг -v .

Но "make" все еще использует "/ usr / bin /x86_64-linux-gnu-ld "(то есть 2.24) и по-прежнему выдает ту же ошибку.

В моей системе Debian /usr/bin/x86_64-linux-gnu-ld (обычно она запускается gcc, а не напрямую make) является символической ссылкой.Вы можете (но я не рекомендую это) просто изменить эту символическую ссылку.


Кстати, вы используете древнюю Ubuntu 14. Вам лучше обновить весь дистрибутив (например, до Ubuntu 18.04.1 LTS на конец 2018 года), потому что в вашей системе есть не только ld, но и много других действительно старых программ.

Обновление вашего дистрибутива займетменьше времени, чем на обновление, компиляцию, установку и настройку каждого отдельного инструмента.

...