首页 > 解决方案 > C编译器找不到函数定义

问题描述

我是 C 编程新手,遇到了这个问题:

三个文件:main.c, foo.h,foo.c位于同一目录中。

main.c

#include <stdio.h>
#include "foo.h"    
int main(){
    printf("%d",func(1));
}

foo.h声明函数func

int func(int);

foo.c定义功能func

#include "foo.h"
int func(int a){
    return a+1;
}

此代码按预期工作,但是当我将定义文件重命名foo.c为其他内容时,例如bar.c,然后main.c在编译期间抛出错误说:

_funcLLVM 错误:程序使用了无法解析的外部函数!

我知道定义文件不需要与头文件同名。为什么我重命名后链接器找不到合适的定义foo.cinto bar.c

更一般地说,链接器如何搜索函数定义?.c逐个搜索同一目录中的每个文件?只搜索.c与头文件同名的文件中的定义?

编辑:我在 MacBook 上使用代码运行程序 IDE,不知道 IDE 是如何实际编译源文件的。

标签: ccompilationlinkercoderunner

解决方案


在编译命令中添加文件名:

$ gcc -o main main.c foo.c && ./main
                     ^^^^^

推荐阅读