Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436867
  • 博文数量: 89
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 938
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-18 21:19
个人简介

为了成为自由自在的人而奋斗!

文章分类

全部博文(89)

文章存档

2016年(5)

2015年(9)

2014年(2)

2013年(10)

2012年(1)

2011年(30)

2010年(32)

分类: C/C++

2010-09-06 22:55:11

有时gcc编译一个工程,突然出现这么个问题:

gcc -Wall   -c -o b.o b.c
gcc -Wall -o test  b.o
b.o:b.c:(.text+0x37): undefined reference to `_printa'
collect2: ld returned 1 exit status
make: *** [test] Error 1

有点摸不着头了,明明在已经在文件里声明了printa这个函数了啊,怎么还是未定义?

看看模拟的简单工程结构:
一个a文件夹里面有a.h,a.c
文件夹b是a的子文件夹,里面有b.c函数

文件内容分别如下:
-------------a/a.h----------------
#include

int printa(void);

-------------a/a.c----------------

#include

int printa(void)
{
    printf("printa is called\n");   

    return 0;
}

--------------a/b/b.c----------------
#include "../a.h"

extern int printa(void);

int main(void)
{
    printf("it's b\n");

    printa();

    return 0;
}

-----------------------------------
b。c中的确声明了printa()函数啊,但是编译器在连接的时候找不到编译过的printa()函数,所以就提示找不到_printa()了,因为printa()函数在a目录下,make只是在b目录下执行,a.c并没有被编译,所以link的时候就提示错误了。

呵呵,工作的时候,恰好遇到类似的一个问题。了解了一下,分享一下。。。
阅读(8370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~