有时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的时候就提示错误了。
呵呵,工作的时候,恰好遇到类似的一个问题。了解了一下,分享一下。。。
阅读(8412) | 评论(0) | 转发(0) |