除了使用 -nostdlib
和自己链接 crt1.o -lc -lgcc
之外,还有什么简单的方法可以防止 gcc 链接 crtbegin[S] .o
和 crtend[S].o
?这些文件不是那么大,但我正在制作小型二进制文件,并且想删除 C 程序不需要的无用 C++ 支持代码。 (假设 gcc 甚至为 C 程序链接它们,以防您使用具有全局对象变量的 C++ 库。我会让每个人都不会提示它应该如何在引用全局对象的任何地方生成安全的一次性初始化调用C++ 模块,而不是在 main
...)
我不反对破解 gcc specs
文件以使 C++ 支持文件的链接以某某为条件,但我不确定该怎么做。也许已经有一个不错的方法?
最佳答案
gcc -wrapper sh,-c,'z= ; for i ; do [ "$z" ] || set -- ; z=1 ;
case "$i" in *crtbegin*.o|*crtend*.o) ;; *) set -- "$@" "$i" ;; esac ;
done ; exec "$0" "$@"'
关于c++ - 有没有一种简单的方法可以让 gcc 省略 crtbegin.o/crtend.o?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4152052/