使用g ++和Makefile编译c ++时,可执行文件的大小非常大

时间:2017-07-11 16:41:09

标签: c++ g++ mingw

在使用Code :: Blocks IDE提供的MinGW中的g ++(版本4.9.2)时,我获得了非常庞大的.exe文件,最高达1000KB的“Hello,World!”程序。我使用完全相同的编译选项,就像它从Code :: Blocks的“内部”编译一样(mingw32-g ++。exe -Wall -g hello.cpp -o hello.exe,无论如何,我只是从代码中复制它::阻止日志窗口),但不同于这种方式,它为Debug目标产生了大约70KB的输出,为Release提供了50KB的输出,这继续产生令人难以置信的大输出。

其他人是否遇到类似问题?

[编辑]我的项目(仅为测试Makefile目的而创建)包含两个文件,main.cpp和fun.cpp(无标题)。这是main.cpp:

#include<iostream>

using namespace std;

void fun(void);

int main()
{
    cout<<"Hello Make!"<<endl;
    fun();
    return 0;
}

这里是fun.cpp:

#include<iostream>

using namespace std;

void fun()
{
    cout<<"Hello from The Module!"<<endl;
}

最后,这是我的Makefile:

CC = mingw32-g++
CFLAGS = -Wall -Os -lto


all: main.o fun.o
    ${CC} -o hello.exe $^

relink:
    mingw32-g++ -o hello.exe hello.o fun.o

main.o: main.cpp
    mingw32-g++ ${CFLAGS} -c main.cpp -o $@

fun.o: fun.cpp
    mingw32-g++ ${CFLAGS} -c fun.cpp -o $@

clean:
    del *.o

在Code :: Blocks下编译这个“项目”时,我得到以下内容 log

使用Makefile时,输出文件大小为1024KB: (print screen

1 个答案:

答案 0 :(得分:3)

调试版本通常比优化版(又称“发布版”版)更大。尝试将-O2-O3添加到您的构建选项(或-Os以专门针对大小进行优化)。

此外,如果您不需要发布版本中的调试符号,请删除-g(或使用strip命令删除它们。)

也;使用链接时优化进行编译有时可以减小尺寸(除了性能改进之外) - 为此使用-lto选项(除了-O选项之一)。

以上情况应该可以显着缩小尺寸。

有关选项的更多详细信息,请参阅gcc手册。