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"
int
main(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错误