编译C语言
我们在Linux下写好c语言源文件test.c
然后执行gcc test.c -o test
把源文件test.c
编译存为可执行文件test
然后用./test
执行程序test
注意:1、源文件和目标文件位置可以互换 2、目标文件可省略,gcc默认生成可执行文件为a.out
虽然我们使用gcc test.c -o test
这一个命令就把源文件编译成了可执行文件,但是呢,其实这中间经过了好几个步骤
我们可以用这一个命令完成编译,当然如果有需要我们也可以一步一步完成编译
源文件test.c
预处理:gcc -E test.c -o tets.i
编译:gcc -S test.c -o test.s
//将源程序编译成汇编语言程序
汇编:gcc -c test.c -o test.o
//将汇编语言翻译成机器语言
链接:gcc test.o -o test
//将.o
文件与库文件相链接,形成可执行文件
各种文件后缀以及其对应文件如下:
动态链接库:在程序执行时加载
静态链接库:在链接时期中加载
GCC默认加载动态链接库。所以这个命令gcc test.c -o test
就是加载动态库
加载静态库:gcc -static test.c -o test
链接头文件
C程序中的头文件包括两种情况:
#include<a.h>
#include “b.h”
区别在于:<>
是让预处理程序cpp在系统预设的头文件目录(linux下预设目录是:/usr/include)中搜寻相应的文件。
""
是让预处理程序cpp在当前目录中搜寻相应的文件。
如果说你的头文件既不在当前目录,也不在预设目录,则需要指定目录
gcc指定头文件所在的目录的参数是-I
例如:
头文件my.h
的内容是#define value 3
,在/home/net/my
目录下
程序a.c
的内容如下 在/home/net/test
目录下
#include "my.h"
#include <stdio.h>
void main()
{
printf("value =%d\n",value);
}
编译时指定其头文件目录:gcc -I /home/net/my.h a.c -o a
指定库文件
编译格式:
# gcc -L 库文件所在目录 程序名称
ps:stdio.h
在 /usr/include
目录下,库文件都在/usr/lib
目录下
GDB调试
使用gcc test.c -o test
编译出来的可执行文件是不能用gdb调试的,因为里面没有附加调试信息
我们应该使用gcc -g test.c -o test
编译文件,-g
参数能为其附加调试信息
编译得到可执行文件test
后
使用gdb调试:# gdb test
//进入调试
具体调试命令,我就省略不写了,自己搜索~
退出命令:# quit