为啥我的可执行文件大小从 780K 增加到 1.1MB?

Posted

技术标签:

【中文标题】为啥我的可执行文件大小从 780K 增加到 1.1MB?【英文标题】:Why has my executable size gone up from 780K to 1.1MB?为什么我的可执行文件大小从 780K 增加到 1.1MB? 【发布时间】:2015-04-16 02:46:26 【问题描述】:

我很确定我没有更改源代码或生成文件。我在 Fedora 19 上使用 Linux。readelf 报告说它现在是 UNIX - GNU,而不是 UNIX - System V,可执行文件的字节 8 是 3 而不是 0。在上面使用 nm 我发现许多功能都发生了变化添加了。但我没有更改源或makefile中的任何内容。这是怎么回事?为什么文件大小膨胀?没有我这么说,它怎么敢改变一些事情?我中了病毒吗?

额外细节

g++ -v

使用内置规范。 COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i686-redhat-linux/4.8.1/lto-wrapper 目标:i686-redhat-linux 配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable -shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker- build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-数组 --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-isl=/builddir/build/BUILD/gcc -4.8.1-20130603/obj-i686-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.1-20130603/obj-i686-redhat-linux/cloog-install --with-tune=generic --with-arch=i686 --build=i686-redhat-linux 线程模型:posix gcc 版本 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC)

【问题讨论】:

嗨 Clive.. 欢迎来到堆栈溢出。您可能想参加网站导览(帮助->页面顶部栏中的导览),它提供了有关哪些类型的问题在此处有效以及如何提出以获得良好答案的指导。我认为你没有提供足够的细节让任何人开始猜测你的问题是什么。 【参考方案1】:

我找到了!全靠我自己。链接器在我提供的库目录中选择了 2007 年 10 月版本的 libc.a libm.a 和 libstdc++.a(提供 780K 可执行文件)。删除这些文件后,它开始选择 2013 年 3 月的版本,因此使可执行文件 (1.1M) 膨胀。不幸的是,我不得不让它变得臃肿,因为我不想找到所有必要的头文件(当然头文件应该与库匹配)。我不责怪软件编写者没有为每个源/目标文件放置一个函数。我责怪链接器仍然没有按函数粒度拖动函数并将循环库搜索作为标准。

【讨论】:

以上是关于为啥我的可执行文件大小从 780K 增加到 1.1MB?的主要内容,如果未能解决你的问题,请参考以下文章

错误 itms-90122 - 无效的可执行文件大小

由于调试符号,巨大的可执行文件,为啥?

为啥我运行应用程序时 jar 文件的大小会增加?

Linux - 为啥我的可执行文件将 libpthread 作为共享库?

为啥 Git Bash 不能运行我的可执行文件?

为啥 Git Bash 不能运行我的可执行文件?