`
maosuhan
  • 浏览: 110149 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ubuntu10.04下gcc+gdb+gvim+makefile

    博客分类:
  • cc++
阅读更多

首先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的时候出错。这里是很耐人寻味的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics