Как остановить gcc от передачи -L со стандартными путями к компоновщику - PullRequest
6 голосов
/ 18 декабря 2010

У меня есть скрипт, который должен предотвращать передачу gcc -L со стандартными путями к ld.Использование -nostdlib запрещает -lc -lgcc и т. Д., Но не -L.Использование -Wl,-nostdlib не позволяет компоновщику использовать собственный стандартный путь, но не мешает gcc передавать -L со стандартными путями.Есть ли способ убедиться, что gcc вызывает компоновщик без указания пути к библиотеке, ожидая, что каталоги, которые я явно записываю в командной строке?

1 Ответ

3 голосов
/ 21 декабря 2010

Я нашел решение, но оно зависит от gcc 4.4 или новее для опции -wrapper (слегка обновленная версия скрипта):

inc=/path/to/alt/incl
lib=/path/to/alt/libs
crt=/path/to/alt/crt1.o
gcc -wrapper sh,-c,'
x= ; z= ; s= ; for i ; do
[ "$z" ] || set -- ; z=1
case "$i" in
-shared) s=1 ; set -- "$@" "$i" ;;
-Lxxxxxx) x=1 ;;
-xxxxxx) x= ; [ "$s" ] || set -- "$@" '"'$crt'"' ;;
*) [ "$x" ] || set -- "$@" "$i" ;;
esac
done
exec "$0" "$@"
' -nostdinc -nostdlib -isystem "$inc" -Wl,-xxxxxx "$@" -L"$lib" -Lxxxxxx -Wl,-nostdlib -lc -lgcc

Моя версия этой обертки настроена на повторное добавление альтернативных файлов crt1.o и libc и libgcc вместо тех, к которым она запрещает доступ, но вы также можете легко их пропустить при необходимости.

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