比方说你的程序由
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
的尺寸要小很多谨前岁,就是因为符号表被去除的原因。
1、首先执行到预编译。直接输出预编译结果。gcc-Ssource_file.c,改乱只执行到源代码到汇编代码的转换,输出汇编代码。gcc-csource_file.c只执行到编译,输出目标文件。2、核基档其次指定输出文件名,可以配合以上三种标签使用。参数可以被省略。这种情况下编译器将使用以下默认名称输出,预编译结果将被输出到标准输出端口(通常是显示器)锋芦生成名为source_file.s的汇编代码。
3、最后生成名为source_file.o的目标文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)