在linux中从C文件生成汇编代码

在linux中从C文件生成汇编代码,c,unix,gcc,C,Unix,Gcc,我想知道如何使用Unix从C程序生成汇编代码。 我尝试了gcc:gcc-c file.c 我还先使用了cpp,然后尝试使用as,但我遇到了错误 我正试图从3个不同的程序中构建一个汇编程序 程序1.c程序2.c程序h 执行gcc-S prog1.c prog2.c prog.h是否正确? 看来这是不对的。我不知道是否必须从它们中生成汇编程序,然后链接它们 谢谢根据手册: `-S' Stop after the stage of compilation proper; do not ass

我想知道如何使用Unix从C程序生成汇编代码。 我尝试了gcc:
gcc-c file.c

我还先使用了
cpp
,然后尝试使用
as
,但我遇到了错误

我正试图从3个不同的程序中构建一个汇编程序

程序1.c程序2.c程序h

执行gcc-S prog1.c prog2.c prog.h是否正确? 看来这是不对的。我不知道是否必须从它们中生成汇编程序,然后链接它们

谢谢

根据手册:

`-S'
     Stop after the stage of compilation proper; do not assemble.  The
     output is in the form of an assembler code file for each
     non-assembler input file specified.

     By default, the assembler file name for a source file is made by
     replacing the suffix `.c', `.i', etc., with `.s'.

     Input files that don't require compilation are ignored.
因此,请从以下位置尝试
gcc-S file.c

如果您使用的是gcc(看起来),那么它就是gcc-s

如果需要,不要忘记使用-I指定include路径

gcc -I ../my_includes -S my_file.c

您将获得带有汇编程序说明的my_file.s。

objdump-d也可以很好地工作,并将为您提供整个二进制文件(exe或共享库)的汇编列表

这比使用编译器生成的asm要清楚得多,因为对同一源文件中函数的调用可能显示为尚未解析到其最终位置


使用-g构建代码,还可以向objdump标志添加--line和/或--source

并考虑使用标志-FVBBOSE ASMY,您应该从必须编译的文件列表中删除PROG.H。但是我需要包括头,我怎么做?头文件应该包含在C文件中。标头包含重要的C语言语句,但它们并不构成完整的程序。它们的目的是帮助您避免反复复制大量样板文件。而是将它放在头文件中,并将其包含在C文件中。
gcc -I ../my_includes -S my_file.c