C编译器可以';找不到函数定义
我是C编程新手,遇到以下问题: 三个文件:C编译器可以';找不到函数定义,c,compilation,linker,coderunner,C,Compilation,Linker,Coderunner,我是C编程新手,遇到以下问题: 三个文件:main.c、foo.h、foo.c位于同一目录中 main.c: #include <stdio.h> #include "foo.h" int main(){ printf("%d",func(1)); } foo.c定义函数func: int func(int); #include "foo.h" int func(int a){ return a+
main.c
、foo.h
、foo.c
位于同一目录中
main.c
:
#include <stdio.h>
#include "foo.h"
int main(){
printf("%d",func(1));
}
foo.c
定义函数func
:
int func(int);
#include "foo.h"
int func(int a){
return a+1;
}
此代码按预期工作,但当我将定义文件foo.c
重命名为其他文件时,例如bar.c
,然后main.c
在编译过程中抛出一个错误:
LLVM错误:程序使用了无法解析的外部函数\u func
我知道定义文件不需要与头文件具有相同的名称。为什么链接器在我将foo.c
重命名为bar.c
后找不到合适的定义
更一般地说,链接器如何搜索函数定义?逐个搜索同一目录中的每个.c
文件?仅在.c
文件中搜索定义,该文件与头文件具有相同的文件名
编辑:
我在MacBook上使用code runner IDE,不知道IDE实际上是如何编译源文件的。在编译命令中添加文件名:
$ gcc -o main main.c foo.c && ./main
^^^^^
你是如何编译的?您必须将对象文件传递给链接器
-o…
@o_是的,请编辑您的问题,包括编译行。您是否尝试过在编译行中包含这两个C文件?类似于gcc main.c bar.c
?链接器在您让他链接的文件中搜索函数定义。因此,编译/链接的方式可能是错误的。您需要向我们展示如何编译/链接。如果你有一个IDE,你需要告诉我们你使用哪一个。同时告诉我们你在哪个平台上。你在使用这个:?@Jabberwocky Yes我认为他在使用一些奇特的IDE,所以我不确定他是否知道你在说什么。@Jabberwocky在这种情况下手动编译是个好主意。