Я нашел решение, но оно зависит от 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
вместо тех, к которым она запрещает доступ, но вы также можете легко их пропустить при необходимости.