gcc -s(注意是小写的s)命令是什么意思?

为什么用此命令编译后的程序比用优化后的程序还小?
2025-03-09 23:23:30
推荐回答(1个)
回答1:

这个参数会把符号表从最终的可执行文件中删除。没有符号表,你就不能用gdb调试了。常见的用法是:

比方说你的程序由 1.c 2.c 3.c 组成,那么你编译的时候应该是这样的

gcc -g -c 1.c
gcc -g -c 2.c
gcc -g -c 3.c

然后链接成可执行文件

gcc -o test 1.o 2.o 3.o

此时生成的 test 是可以用gdb来调试的,因为它包括了符号表等调试信息。

但是如果你用

gcc -s -o test_s 1.o 2.o 3.o
生成的 test_s 就不能调试了,因为-s参数把符号表等信息都从可执行文件中去除了。

此时你比较一下 test 和 test_s ,虽然功能是完全一样的,但是 test_s 的尺寸要小很多,就是因为符号表被去除的原因。