Я собрал GCC 4.9.3 из исходников и установил в свой домашний каталог с некоторым префиксом, например gcc4.9
,
Теперь я хочу использовать более новую версию binutils
вместе с GCC 4.9.3. Я собрал их и установил отдельно в своем домашнем каталоге с префиксом binutils2.26
,
Как я могу заставить gcc-ar
от gcc4.9
использовать ar
от binutils2.26
вместо системы один? Всегда звонит /usr/bin/ar
и похоже, что нет вариантов для указания. Замена /usr/bin/ar
как-то не вариант — у меня нет root-доступа на этой машине.
Используйте GCC -B
пометить и указать на каталог, который содержит ar
Вы хотите выполнить. Увидеть Руководство GCC для более подробной информации об этом флаге.
gcc-ar -B/path/to/your/dir ...
Кажется, работает для меня:
$ strace -f -eexecve gcc-ar rc foo.a /dev/null |& grep /ar
[pid 14485] execve("/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/../../../../x86_64-pc-linux-gnu/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/bin |& grep /ar
[pid 14493] execve("/usr/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ |& grep /ar
[pid 14500] execve("/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ar", [...]) = 0
Мне удалось исправить эту проблему.
С помощью strace
, Я нашел это gcc-ar
ищет ar
в нескольких каталогах, в том числе <gcc install dir>/libexec/gcc/x86_64-redhat-linux/4.9.3
,
Таким образом, очевидным решением является создание ссылок в этом каталоге, ориентированных на соответствующие binutils2.26
исполняемые файлы:
cd "<gcc install dir>/libexec/gcc/x86_64-redhat-linux/4.9.3"for file in ~/binutils2.26/bin/* ; do ln -s "${file}" ; done
После этого все, исполняемые файлы в ~/binutils2.26/bin
будет реплицироваться как ссылки в каталоге GCC 4.9.3 и будет использоваться автоматически при сборке с помощью этой версии GCC.