c - 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
在编译期间抛出错误说:
_func
LLVM 错误:程序使用了无法解析的外部函数!
我知道定义文件不需要与头文件同名。为什么我重命名后链接器找不到合适的定义foo.c
into bar.c
?
更一般地说,链接器如何搜索函数定义?.c
逐个搜索同一目录中的每个文件?只搜索.c
与头文件同名的文件中的定义?
编辑:我在 MacBook 上使用代码运行程序 IDE,不知道 IDE 是如何实际编译源文件的。
解决方案
在编译命令中添加文件名:
$ gcc -o main main.c foo.c && ./main
^^^^^
推荐阅读
- oracle - 还原表空间 USERS 不起作用。甲骨文备份
- c++ - UXTheme:绘制无边界组合框雪佛龙
- javascript - 通过反应检测对子组件的关注
- java - 通过引用传递——java中的“hack”不再工作了?
- mysql - PL/SQL、MySQL 或 PostgreSQL 中日期字段中日期之间的天数
- discord - Discord.py:`on_member_update()` 被反复调用 [仅限 1 个公会]
- reactjs - 对象中的属性更新后,MobX 对象数组不会重新渲染
- php - Crud Destroy不是破坏
- r - 如何使用 tidyverse Rstudio 代码更改数据的列和行?
- mongodb - 有一种开箱即用的方法可以将 SimplifiedJson 转换为 ExtendedJson?