首先gcc是ubutnu下默认安装的。装gdb:
sudo apt-get install gdb
然后再装gvim:
sudo apt-get install gvim
于是我们可以编写一个hello world程序。
新建文件my.h
里面写
int b=8;
再新建一个my.h,里面写:
int add(int a,int b);
再新建一个my.c,里面写
int add(int a,int b){
return a+b;
}
再新建一个test.c,里面写
#include <stdio.h>
#include "my.h" //这里你也可以用extern int add(int ,int) 来代替
int main(){
printf("%d\n",add(2,3));
return 0;
}
接着写makefile,在同目录下(注意gcc前面应当是一个tab键)
test:my.o my.o test.o
gcc my.o test.o -o test
my.o:my.c
gcc -c my.c -o my.o
test.o:test.c my.h
gcc -c test.c -o test.o
里面的具体的约束规则我就不多说了。注意,这里如果你在gcc后面不加任何参数的话,会默认你要生成的是可执行文件,就算你指定目标后缀名是.o但是这个.o竟然是可执行文件。
然后在命令行上写 make test就可以了。
如果要调试的话
只要修还makefile为
test:my.o test.o
gcc -g test.c my.c my.h -o test
即可。
用gdb ./test,然后b 3,r,print,step来调试
具体讲一下细节
如果有一段c代码test.c:
#include <stdio.h>
int add(int,int);
int main(){
printf("%d\n",add(2,3));
return 0;
}
你可以用gcc -E test.c -o test.i
gcc -S test.i -o test.s
as test.s -o test.o
gcc test.o -o test
你可以发现在执行最后一条语句的时候出错了。可见在做函数连接的时候是在最后连接的时候做的。
而如果有一段代码是,
#include <stdio.h>
int add(int,int);
int main(){
dasdasddasadsasd
printf("%d\n",add(2,3));
return 0;
}
中间加了一串莫名其妙的字符,则会在生成test.s的时候出错。这里是很耐人寻味的。