如何在linux下查看gcc生成的.s文件

如何在linux下查看gcc生成的.s文件,第1张

Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如芹轮枝果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对桐告源代码进行调试,我们就必须加入这个选项。 -O,对程序进行嫌敏优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。

这个参数会把符号表从最终的可执行文件中删除。没有符号表,你就悔李不能用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

的尺寸要小很多谨前岁,就是因为符号表被去除的原因。

1、首先执行到预编译。直接输出预编译结果。gcc-Ssource_file.c,改乱只执行到源代码到汇编代码的转换,输出汇编代码。gcc-csource_file.c只执行到编译,输出目标文件。

2、核基档其次指定输出文件名,可以配合以上三种标签使用。参数可以被省略。这种情况下编译器将使用以下默认名称输出,预编译结果将被输出到标准输出端口(通常是显示器)锋芦生成名为source_file.s的汇编代码。

3、最后生成名为source_file.o的目标文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8196917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存