1.建一个目录
2.写代码,建一个hello.c文件
代码:
#include "stdio.h"
main()
{
printf("Hello Linux.\n")
}
记得最后一定要换行
3.编译
gcc -o hello hello.c
使用gcc 编译器就会为我们生成一个hello的可执行文件
4.输出
执行./hello就可以看到程序的输出
结果了.
是不是很简单?
命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译
器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.
gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们已经知道
了,表示我们要求输出的可执行文件名. -c选项表示我们只要求编译器输出目标代码,而
不必要输出可执行文件. -g选项表示我们要求编译器在编译的时候提供我们以后对程序
进行调试的信息.
知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更
多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明.
下面我们来演示怎样用GDB来调试一个求0+1+2+3+…+99的程序:
/* Filename:hello.c */ #include "stdio.h" |
执行如下命令编译hello.c(加-g选项产生debug信息):
#gcc –g –o hello sum.c
在命令行上键入gdb hello并按回车键就可以开始调试sum了,再运行run命令执行sum
#gdb hello
list命令用于列出源代码,对上述程序两次运行list,将出现如上画面(源代码被标行号)。
根据列出的源程序,如果我们将断点设置在第5行,只需在gdb 命令行提示符下键入如下命令设置断点:(gdb) break 5
设置断点的另一种语法是 break
相反的,clear用于清除所有的已定义的断点,clear
watch命令:
watch命令用于观查变量或表达式的值,我们观查sum变量只需要运行watch sum
watch
要观查当前设置的watch,可以使用info watchpoints命令。
next、step命令:
next、step用于单步执行,在执行的过程中,被watch变量的变化情况将实时呈现(分别显示Old value和New value)
next、step命令的区别在于step遇到函数调用,会跳转到到该函数定义的开始行去执行,而next则不进入到函数内部,它把函数调用语句当作一条普通语句执行。
/* filename:add.h */ extern int add(int i, int j); /* filename:add.c */ int add(int i, int j) { return i + j; } /* filename:main.c */ #include "add.h" main() { int a, b; a = 2; b = 3; printf("the sum of a+b is %d", add(a + b)); } |
test : main.o add.o gcc main.o add.o -o test main.o : main.c add.h gcc -c main.c -o main.o add.o : add.c add.h gcc -c add.c -o add.o |
OBJS = main.o add.o CC = gcc CFLAGS = -Wall -O -g test : $(OBJS) $(CC) $(OBJS) -o test main.o : main.c add.h $(CC) $(CFLAGS) -c main.c -o main.o add.o : add.c add.h $(CC) $(CFLAGS) -c add.c -o add.o |
clean: rm -f *.o |
运行make clean时,将执行rm -f *.o命令,删除所有编译过程中产生的中间文件。
不管怎么说,自己动手编写makefile仍然是很复杂和烦琐的,而且很容易出错。因此,GNU也为我们提供了Automake和Autoconf来辅助快速自动产生makefile,读者可以参阅相关资料。
7.小结
本章主要阐述了Linux程序的编写、编译、调试方法及make,实际上就是引导读者学习怎样在Linux下编程,为后续章节做好准备。
参考:
Linux下的C编程实战之开发平台搭建
http://dev.yesky.com/474/7596974.shtml
Linux系统下的C语言编程入门:
http://dev.yesky.com/topic/299/7654799.shtml
C语言初学者入门讲座
http://www.programfan.com/article/subject1.asp
linux操作系统下c语言编程入门
http://www.chinaunix.net/jh/23/56653.html