首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

gcc编译链接时无法找到自己的头文件?该如何解决

2012-04-13 
gcc编译链接时无法找到自己的头文件?一共有3个文件main.c message.c message.h其中message.c的内容C/C++ c

gcc编译链接时无法找到自己的头文件?
一共有3个文件
main.c message.c message.h

其中message.c的内容

C/C++ code
#include <stdio.h>void goodbye(void){    printf("hello world\n");}


message.h的内容
C/C++ code
extern void goodbye();


main.c的内容
C/C++ code
#include <stdio.h>#include "message.h"intmain(int argc,char **argv){    goodbye();    return 0;}


直接编译gcc -o goodbye main.c,提示main.c:(.text+0x15): undefined reference to `goodbye'

分别编译,即gcc -c message.c 然后gcc -c main.c ,最后链接gcc -o goodbye main.c message.c 则ok,可产生运行goodbye可执行文件

为什么直接编译不ok呢?gcc默认应该在当前文件夹下寻找自己定义的头文件的啊...然后在连接的时候搞定啊,奇怪.试过了iquote和-L选项都不ok,

os:archlinux 
gcc version:4.6.2
HELP!!!谢谢


[解决办法]
gcc -o goodbye main.c用法本来就有问题啊

这不是没找到头文件的问题,这是没找到实现,因为你第一种用法,根本没把goodbye的实现体message.c编译

并不是说找到了头文件,相应的源文件就自动编译了

gcc -o goodbye main.c message.c是正确的,而且不需要单独运行前两步
[解决办法]
头文件只是只起到检查的作用,真正到链接时必须要有相应符号的声明或者实现
[解决办法]
这明显是链接错误

头文件和实现本来就是分离的,你编译完了后得转交给ld进行链接时的工作

缺少的符号要linker进行查询,如果用户没有指明,则会在系统既定搜索库(和编译gcc的target有关)中搜索,找不到就提示undefined reference错误

热点排行