Запретить пути библиотеки по умолчанию с помощью gcc
Есть ли способ заблокировать поиск по пути библиотеки по умолчанию с помощью gcc? -nostdinc
делает это для поиска пути включения, но -nostdlib
, либо путем упущения, либо по дизайну, только запрещает -lc -lgcc
и т.д., но не пути поиска библиотеки.
Ответы
Ответ 1
Вы можете сделать это с помощью файлов спецификаций (хотя вождение с ними кажется чем-то вроде темного искусства для меня...).
Если вы посмотрите на результат gcc -dumpspecs
, спецификация link_command
- это та, которая строит действительную команду, которая вызывается. Копаясь в некоторых других спецификациях, которые он ссылается, спецификация link_libgcc
, которая обычно определяется (по крайней мере для собственных компиляторов):
*link_libgcc:
%D
является виновником:
%D
Выгрузите параметр -L для каждого каталога, который, по мнению GCC, может содержать файлы запуска. Если цель поддерживает multilibs, то текущий каталог multilib будет добавлен к каждому из этих путей.
Вы можете переопределить его, создав файл (например, my.specs
), который заменит пути по вашему выбору:
*link_libgcc:
-L/foo/bar -L/blah/blah
а затем прохождение -specs=my.specs
до gcc
.
Ответ 2
Предполагая, что базовый загрузчик ld
, вы можете перенаправить весь путь загрузки с помощью
--sysroot=directory
(Я не помню тот вариант, который вы должны использовать для передачи аргументов загрузчика в gcc, но есть один...)
Вы можете либо иметь "каталог" как нечто поддельное, где библиотеки не найдены, или имитировать макет каталога для вашего собственного проекта.
Ответ 3
Вы можете попробовать -nodefaultlibs, чтобы избежать всех библиотек по умолчанию, а затем используйте -L и -l для добавления библиотек, которые вы хотите, в нужные вам каталоги.
Каталоги, указанные в командной строке с параметром -L, должны иметь приоритет над каталогами по умолчанию.
Ответ 4
Как просто установить переменную среды LIBRARY_PATH
?
Если я правильно понял вопрос, вы хотите сделать что-то вроде принуждения компоновщика посмотреть путь к локальной библиотеке до пути по умолчанию, поэтому вы можете просто указать эту переменную для управления порядком.