https://jyywiki.cn/OS/2023/build/lect2.ipynb
编译完成后文件大小为16KB。
#include <stdio.h>
int main() {
printf("Hello World\\n");
}
使用objdump工具查看汇编代码objdump -d a.out | less
。
使用静态文件进行编译,gcc hello.c -static
,编译完成后大小为880kb,查看行数,objdump -d a.out | wc -l
,共154193行。
打开gcc的日志功能gcc hello.c -static --verbose
,可以打印出编译时的运行日志。
gcc运行日志
编译过程:.c(源代码)->.i(预编译源代码)-gcc->.S(汇编代码)-as->.o-ld->a.out
打印链接选项gcc hello.c -static -Wl,--verbose
。可以看到它链接了很多东西。
使用gcc -E hello.c
可以看到预编译结果。
预编译结果(部分)
使用gcc -c hello.c
生成hello.o,使用objdump -d hello.o
查看内容。
查看内容
使用ld命令强行链接,ld hello.o
,会出现一个warning和一个error。
强行链接结果
去除外部依赖,重新编译。