首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用g++和Makefile编译c++时,可执行文件的大小非常大

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

Stack Overflow用户
提问于 2017-07-12 00:41:09
回答 1查看 898关注 0票数 0

在使用Code::Blocks提供的MinGW提供的g++ (4.9.2版)时,我得到了非常大的.exe文件,大小高达1000KB,表示"Hello,World!“程序。我使用的编译选项与从代码::块(mingw32 -g ++.exe -Wall -g hello.cpp -o hello.exe,不管怎样,我只是从代码::块日志窗口中复制)的“内部”编译选项完全相同,但与这种方式不同的是,它为调试目标产生了大约70KB的输出,为发布产生了大约50KB的输出,这持续产生令人难以置信的大量输出。

其他人也遇到过类似的问题吗?

EDIT My project (只为测试Makefiles而创建)由两个文件组成,main.cpp和fun.cpp (无头文件)。下面是main.cpp:

代码语言:javascript
复制
#include<iostream>

using namespace std;

void fun(void);

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

下面是fun.cpp:

代码语言:javascript
复制
#include<iostream>

using namespace std;

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

最后,这是我的Makefile:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2017-07-12 00:49:07

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

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

此外,使用链接时间优化进行编译有时可以减少大小(除了性能改进之外)-为此,请使用-lto选项(除了-O选项之一)。

上面的代码会让你的尺寸大大减小。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45040230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档