加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用MinGW的C可执行文件大小

发布时间:2020-12-16 09:47:06 所属栏目:百科 来源:网络整理
导读:我通常用C语言编写大小编码演示竞赛(64kb),但考虑转到C语言. 在MinGW下我对.exe-size有些麻烦. (在使用可执行程序包装程序之前,我必须将其降低到100 kb.). 我看过这个: ?How to reduce the size of executable produced by MinGW g++ compiler? 但是我已经
我通常用C语言编写大小编码演示竞赛(64kb),但考虑转到C语言.

在MinGW下我对.exe-size有些麻烦. (在使用可执行程序包装程序之前,我必须将其降低到<100 kb.). 我看过这个:
?How to reduce the size of executable produced by MinGW g++ compiler?
但是我已经在使用MinGW / g 4.8.1和-s -Os …见下文(对于4.8.1也是如此:无法识别的选项’-shared-libstdc’并且找不到-lstdc _s).

这个小小的helloworld只有10 kb(可以):

#include "windows.h"
int main() {
    MessageBoxA(0,"test",0);
    return 0;
}

但是,当我添加:

#include <string>
...
std::string asdf;

它变成193 kb

当我添加:

#include <iostream>

然后它变成756 kb.

我正在使用这些标志:

-std=c++11
-Wall
-s       (or -Wl,-s)
-Os
-DNDEBUG
-fno-exceptions
-fno-rtti
(note: removed those with no effect)

必须有一些方法只链接我使用的东西.我错过了什么?

可选1:是否可以在MinGW / g 4.8.1中使用-shared-libstdc或-lstdc _s?

可选2:当我尝试-nostdlib并用WinMain替换main时:

#include "windows.h"
    int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
        MessageBoxA(0,0);
        return 0;
    }

我没有编译器警告,但运行时崩溃,它编译为C时工作正常. (可选,因为我不希望你/我花时间调试crt-startup,编译器 – 链接器标志来修剪库会更有帮助)

解决方法

这些额外的字节被标准库调用“拉入” – 高级别的字节往往会带来它们下面的所有内容,内存分配,它们使用的异常等等.最简单的方法是尽量减少使用的内容.在putchar()上建立一个hello世界可能会给你一个很好的比较点.我将专注于静态链接的程序,因为我知道,rubenvb的答案似乎无论如何都能很好地覆盖共享库.

新的,删除,纯虚函数等功能也可以提取库中的位以及下面的许多依赖项.关于如何替换它们的快速概述在这里:http://ptspts.blogspot.com.au/2010/12/how-to-write-c-program-without-libstdc.html – 如果你真的非常极端,你可以找到以相同方式处理的malloc版本.

最近使用C 11,如果你这样做,你会遇到__cxa_guard_acquire和__cxa_guard_release:

int foo() {
    static int bar = 1; //thread safe in C++11,requires inbuilt functions
}

为此,如果编译器支持,请使用-fno-threadsafe-statics标志.

如果这不能让你足够远,你可以链接linux版本的ld上的标志-Map = filename.map来生成一个“map”文件.输出文件的第一部分列出了每个被拉入的部分以及需要它的部分.*

*地图文件还会显示函数部分对标准库没有任何作用,因为它已经在没有该标志的情况下编译,除此之外

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读