【发布时间】:2020-08-03 08:33:33
【问题描述】:
我是 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 在编译期间抛出错误:
LLVM 错误:程序使用了无法解析的外部函数
_func!
我知道定义文件不需要和头文件同名。为什么我将foo.c重命名为bar.c后链接器找不到合适的定义?
更一般地说,链接器如何搜索函数定义?逐个搜索同一目录下的每个.c 文件?只搜索与头文件同名的.c文件中的定义?
编辑: 我在 MacBook 上使用 code-runner IDE,不知道 IDE 是如何编译源文件的。
【问题讨论】:
-
你是怎么编译的?您必须将目标文件传递给链接器
-o ... -
@o_yeah 请编辑您的问题,包括您的编译行。您是否尝试在编译行中包含两个 C 文件?
gcc main.c bar.c之类的东西? -
链接器在您告诉他链接的文件中搜索函数定义。所以可能你编译/链接的方式是错误的。您需要向我们展示您如何编译/链接。如果您是 IDE,您需要告诉我们您使用的是哪一个。还请告诉我们您使用的平台。
-
你在用这个吗:coderunnerapp.com?
-
@Jabberwocky 是的
标签: c compilation linker coderunner