Запретить пути к библиотекам по умолчанию с помощью gcc - PullRequest
17 голосов
/ 21 сентября 2011

Есть ли способ запретить поиск пути к библиотеке по умолчанию с помощью gcc? -nostdinc делает это для поиска по включаемому пути, но -nostdlib, либо по пропускам, либо по замыслу, запрещает только -lc -lgcc и т. Д., Но не пути поиска в библиотеке.

Ответы [ 4 ]

22 голосов
/ 21 сентября 2011

Вы должны быть в состоянии сделать это с spec-файлами (хотя игра с ними кажется чем-то вроде темного искусства для меня ...).

Если вы посмотрите на выводиз gcc -dumpspecs, спецификацией link_command является та, которая создает фактическую команду, которая вызывается.Пролистав некоторые другие спецификации, на которые он ссылается, спецификацию link_libgcc, которая обычно определяется (по крайней мере, для собственных компиляторов) как:

*link_libgcc:
%D

, является виновником:

%D

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

Вы можете переопределить его, создав файл (например, my.specs), который заменит пути по вашему выбору:

*link_libgcc:
-L/foo/bar -L/blah/blah

и затем передаст -specs=my.specs в gcc.

1 голос
/ 21 сентября 2011

Предполагая, что базовый загрузчик равен ld, вы можете перенаправить весь путь его загрузки с помощью

--sysroot=directory

(я не помню, какой параметр вы должны использовать для передачи аргументов загрузчика в gcc, но есть один ...)

Вы можете либо сделать «каталог» чем-то фальшивым, где не найдены библиотеки, либо имитировать макет каталога для вашего собственного проекта.

0 голосов
/ 21 сентября 2011

Как насчет простой установки переменной окружения LIBRARY_PATH?

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

0 голосов
/ 21 сентября 2011

Вы можете попробовать -nodefaultlibs, чтобы избежать всех библиотек по умолчанию, затем используйте -L и -l для добавления библиотек, которые вы хотите, в нужные вам каталоги.Каталоги, указанные в командной строке с параметром -L, должны иметь приоритет над каталогами по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...