从gcc和mingw中删除不需要的代码

kil*_*ode 0 c gcc mingw

我注意到mingw在调用main()之前添加了很多代码,我假设它用于解析命令行参数,因为其中一个函数被称为__getmainargs(),并且还有很多字符串被添加到最终的可执行文件中,例如mingwm.dll和一些错误字符串(包括应用程序崩溃)说mingw运行时错误或类似的东西.

我的问题是:有没有办法删除所有这些东西?我不需要所有这些东西,我尝试了tcc(微小的c编译器)它完成了这项工作.但不像gcc那样跨平台(solaris/mac)

有任何想法吗?

谢谢.

pax*_*blo 5

是的,你真的需要所有这些事情.它们是代码运行的C环境的启动和拆卸代码.

除了低级嵌入式解决方案之类的非托管环境之外,您会发现几乎所有 C环境都具有类似的功能.类似/lib/crt0.oUNIX的操作系统或crt0.objWindows下的情况.

它们对于成功运行代码至关重要.您可以随意忽略你不使用(库函数printf,abs等等),但所需要的启动代码.


它可能执行的一些事情是atexit结构的初始化,参数解析,C运行时库的结构初始化,C/C++预主值的初始化等等.

它是高度特定于操作系统的,如果有你不想做的事情,你可能必须得到它的源代码并将它们取出,实质上是为目标文件提供你自己的缩减替换.