是否有一种简单的方法可以使gcc省略crtbegin.o/crtend.o?

R..*_*R.. 12 c c++ linux gcc

除了使用-nostdlib和链接crt1.o -lc -lgcc自己,是否有任何简单的方法来阻止gcc链接crtbegin[S].ocrtend[S].o?这些文件不是那么大,但我正在玩小型二进制文件,并希望删除C程序不需要的无用的C++支持代码.(据推测,如果您正在使用带有全局对象变量的C++库,gcc甚至会将它们链接到C程序.我会让所有人大肆宣传如何在全局对象被引用的地方生成安全的一次性初始化调用C++模块而不是在main... 之前初始化全局对象

我不反对黑客攻击gcc specs文件以使C++支持文件的链接成为某种条件,但我不确定如何做到这一点.也许已经有了一个很好的方式?

R..*_*R.. 7

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" "$@"'
Run Code Online (Sandbox Code Playgroud)