c++ - 有没有一种简单的方法可以让 gcc 省略 crtbegin.o/crtend.o?

标签 c++ c linux gcc

除了使用 -nostdlib 和自己链接 crt1.o -lc -lgcc 之外,还有什么简单的方法可以防止 gcc 链接 crtbegin[S] .ocrtend[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/

相关文章:

c - 在 C 中对动态分配的可变长度字符串数组进行排序

c - 使用 tcp 套接字时的数据转换模式是什么?

linux - Git:在推送前本地删除后可以恢复文件吗?

linux - 当您登录到标准用户然后在 ssh 到 linux 服务器上 su 到其他用户时,如何在 bat 文件中切换用户?

java - 如何编译支持GPU的tflite?

C++:二进制到十进制的转换过程外观

嵌套结构的 C 问题(看起来 1 个实例是在没有明确定义的情况下定义的)

linux - 想通过 ansible 运行简单的 root 命令

c++ - 在 O(n.logn) 中至少出现两次的最长子串

c++ - CMake OSX 命令行与 GUI 差异