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

时间:2010-11-11 06:58:30

标签: 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 ++支持文件的链接以某种方式为条件,但我不确定如何做到这一点。也许这已经很好了?

2 个答案:

答案 0 :(得分: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" "$@"'

答案 1 :(得分:4)

我认为您需要-nostartfiles选项。这就是我对嵌入式东西的需求。