linux gcc编译c文件头文件
linux gcc编译c文件头文件,使用GCC编译器编译C语言
凶猪下山
转载
关注
0点赞·1047人阅读
GCC编译C源代码有四个步骤:预处理—->编译—->汇编—->链接。
可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程。
下面将通过对一个程序的编译来演示整个过程。
#include
int main()
{
printf("happy new year!\n");
return 0;
}
1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。
预处理 命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i
2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令。
编译命令:gcc -S hello.i -o hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件
3:汇编:把编译阶段生成的.s 文件转换为二进制目标代码。可用gcc的参数-c来参看。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式, 并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言。
汇编 命令:gcc -c hello.s -o hello.o
作用:作用:将汇编输出文件hello.s编译输出hello.o文件
4:链接:把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入。结果就是hello文件,它是一个课执行的目标文件,可以加载到存储器后由系统调用。
链接命令:gcc hello.o -o hello
一步操作的话是: (-o必须在hello之前 )
$gcc hello.c -o hello
$./hello或者:(会默认生成a.out文件)
$gcc hello.c
$./a.out
‘贰’ 我想用gcc编译一个汇编程序,就是把c语言转成汇编。
假设你的函数保存在main.c中。
gcc -S main.c -o main.s
-S表示assembly 汇编的意思,也就是生成汇编文件
‘叁’ gcc -s(注意是小写的s)命令是什么意思
这个参数会把符号表从最终的可执行文件中删除。没有符号表,你就不能用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
的尺寸要小很多,就是因为符号表被去除的原因。
‘肆’ .s文件的生成;C语言中.c文件怎么生成.s文件。谢谢大家!
fprintf(fp1,"abc"):
你这里自己写的abc。代码写错了,你再好好想想,输出文本内容是这样写的么
‘伍’ linux 怎么编译c的源程序的gcc,编译命令是什么
在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器。
先将源文件编译成目标文件:gcc - c hello.c
生成hello.o文件,再将目标文件编译成可执行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux ");
}
(5)Gcc编译成s扩展阅读:
在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
网络_gcc
‘陆’ gcc 编译生成外部调试语法文件
你用的是linux系统吧? binutil包里面有个objcpy命令:
obj --only-keep-debug [被提取的文件] [提取出来的调试符号文件,建议加.debug后缀]
另外要把调试信息去掉是用strip命令。你可以man下看看。
strip --strip-debug [需要处理的文件]
把debug信息加回去:
obj --add-gnu-debuglink=[debug文件] [需要添加debug信息的文件]
‘柒’ 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)
gcc -S *.c 预处理+反汇编
‘捌’ Linux下gcc编译器用什么命令生成.s文件
gcc -s 源文件 –o目标文件
‘玖’ GCC如何编译一个汇编文件,得到可执行文件
gcc -c my.s(生成my.o)
gcc -o my my.o
my就是所要的可执行文件
或者直接可以gcc -o my my.s