在使用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)
答案 0 :(得分:3)
调试版本通常比优化版(又称“发布版”版)更大。尝试将-O2
或-O3
添加到您的构建选项(或-Os
以专门针对大小进行优化)。
此外,如果您不需要发布版本中的调试符号,请删除-g
(或使用strip
命令删除它们。)
也;使用链接时优化进行编译有时可以减小尺寸(除了性能改进之外) - 为此使用-lto
选项(除了-O
选项之一)。
以上情况应该可以显着缩小尺寸。
有关选项的更多详细信息,请参阅gcc手册。