【发布时间】:2021-12-19 18:40:08
【问题描述】:
我现在在 linux 上。我正在编译一个超级简单的 C 程序:
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
并编译
gcc main.c -o main
在运行ll 以获取文件大小后,它会返回以下内容:
-rwxr-xr-x 1 xylight xylight 16K Nov 5 11:30 main
-rw-r--r-- 1 xylight xylight 68 Nov 5 11:23 main.c
-rw-r--r-- 1 xylight xylight 1.5K Nov 5 11:30 main.o
链接main.o后,文件大小变为16KB!我怎样才能让这个更小?任何链接器选项?
我不确定这是否是重复的,我在这里找不到任何东西。让我知道它是否重复。
运行 readelf -h main 后,它说 ELF 类型是这样的:DYN (Shared object file)
有谁知道我可以做些什么来使这个更小?
【问题讨论】:
-
elf可执行文件包含的内容远不止您编写的代码。例如,它与 C 运行时代码 (crt0.o) 链接 -
printf()具有广泛的功能,并且由于它的大小,一些嵌入式编译器仅将其作为选项包含。 -
你为什么关心文件有多大?我希望所有这三个文件都占用 32Kbytes 的磁盘空间。
-
@WeatherVane 请注意,
printf实现未链接到可执行文件中(它驻留在libc.so.6中),因此不会增加开销。 -
我想在某个地方我们有一个规范的“为什么我编译的可执行文件这么大”的问题,但我现在找不到。