我有一个脚本需要阻止gcc将-L
标准库路径传递给ld
。使用-nostdlib
会禁止-lc -lgcc
等,但不会-L
。使用-Wl,-nostdlib
可以防止链接器使用自己的标准路径,但不会阻止gcc使用标准路径传递-L
。有没有办法确保gcc在库路径中没有任何内容调用链接器期望我在命令行上显式写入的目录?
答案 0 :(得分:3)
我找到了一个解决方案,但它取决于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
文件来代替它阻止访问的文件,但您可以轻松省略如果需要的话。