Запретить пути библиотеки по умолчанию с помощью 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?

Если я правильно понял вопрос, вы хотите сделать что-то вроде принуждения компоновщика посмотреть путь к локальной библиотеке до пути по умолчанию, поэтому вы можете просто указать эту переменную для управления порядком.