I have a script that needs to prevent gcc from passing -L
with the standard library paths to ld
. Using -nostdlib
inhibits the -lc -lgcc
etc. but not the -L
. Using -Wl,-nostdlib
prevents the linker from using its own standard path, but doesn't stop gcc from passing -L
with the standard paths. Is there any way to ensure that gcc calls the linker with nothing in the library path expect the directories I explicitly write on the command line?
I found a solution but it depends on gcc 4.4 or later for the -wrapper
option (slightly updated version of the script):
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
My version of this wrapper is tuned to re-add alternate crt1.o
and libc
and libgcc
files in place of the ones it prevents access to, but you could just as easily omit them if needed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With