除了使用-nostdlib
和自己链接crt1.o -lc -lgcc
,有没有简单的方法来阻止gcc链接crtbegin[S].o
和crtend[S].o
? 这些文件并不是那么大,但是我正在玩弄小的二进制文件,并且想要删除C程序不需要的无用的C ++支持代码。 (假设你使用C ++库和全局对象variables,那么gcc甚至可以把它们连接到C程序中,我会告诫大家应该如何在全局对象被引用的地方生成安全的一次性初始化调用C ++模块,而不是在main
之前初始化全局对象…)
我不会反对黑客gcc specs
文件来连接的C + +支持文件条件在某某specs
,但我不知道我会怎么做。 也许有一个很好的方法?
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" "$@"'
我认为你需要-nostartfiles
选项。 这就是我所需要的嵌入式的东西。