1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <stdio.h> int foo(int n); void bar(int m); int main(void){ int a; char *s = "hello, world"; printf("%s\n",&s[7]); a = 5; foo(a); return 0; } int foo(int n){ int b; b = n; b *=2; bar(b); return b; } void bar(int m){ printf("hi,i am bar!\n"); }
|
gcc程序编译
1
| gcc -g -Wall bar.c -o bar
|
编译可分为四个阶段:
1.预处理:宏定义,头文件
2.编译:c–>汇编语言
3.汇编:汇编成目标文件 .o (二进制文件)
4.链接:把所有的目标文件和库文件链接成一个可执行的文件
gcc 参数
-I /home/include:指定头文件路径,先找预设路径
-L /usr/lib:库文件路径,先找指定目录,再找系统预设路径
-lfun:库文件中指定函数库 libfun.a
-static:静态链接库文件 .a为后缀,将所需要的函数copy到执行文件中
而动态链接库以 .so为后缀 指明当程序执行时,首先必须载入这个库,缺省操作
-Wall:生成所有的警告信息
-g:产生调试工具所必须的
-c:只生成一个.o后缀的目标文件
gdb程序调试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| break main run list print a print s print s+90 next print s next print s[7] print &s[7] print a next print a step next next print n print b step print m continue b 5 if i=10 当i等于10时第5行断点生效 delete 断点编号 :删除断点 quit
|
Makefile工程管理
当有很多个文件都需要编译时,不可能一个一个的去gcc吧
通过make命令就能够使整个软件工程完成编译和链接
make在执行行,需要一个命名为Makefile的文件,它描述了整个工程的编译,链接等规则