【问题标题】:C compiler can't find function definitionC编译器找不到函数定义
【发布时间】:2020-08-03 08:33:33
【问题描述】:

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

三个文件:main.cfoo.hfoo.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


【解决方案1】:

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

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

【讨论】:

  • 我认为他正在使用一些花哨的 IDE,所以我不确定他会知道你在说什么。
  • @Jabberwocky 在这种情况下手动编译是个好主意。
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 2019-03-17
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多