首页 > 其他 > 详细

Makefile 的用处,解决已包含头文件但还是 undefined reference to

时间:2020-12-06 23:35:38      阅读:260      评论:0      收藏:0      [点我收藏+]

A.c (main函数)

#include "B.h"

int main(void) {
      //内容
      return 1;
}

B.c

#include "B.h"
void func_b() {
      //内容
}

B.h

#ifndef B_H_
#define B_H_

//头文件内容
void func_b();
#endif

注:B_H_ 是规范的写法,_B_H 不是规范写法,因为c库内置的定义都是下划线开头的,用户定义的头文件不应该以下划线开头

好了,我们编译一下(Linux 下的可执行文件可以没有后缀名,而 Windows 下的可执行文件需要 exe 后缀,即 A.exe)

gcc A.c -o A

这时会提示 undefined reference to func_b

为什么呢,我们看一下编译工具预处理后但还没汇编的源码文件

gcc -E A.c -o A.i

这时候你可以看到 A.i 里面的内容,只有 A.c 和 B.h 的内容以及其他链接信息,但没有包含 B.c 的内容。
因为我们的编译命令错了

正确的编译命令

gcc A.c B.c -o A

单文件的编译流程:
hello.c(预处理) -> hello.i(编译) -> hello.s(汇编) -> hello.o(链接) -> hello

gcc -E    hello.c -o hello.i   //预处理
gcc -S    hello.i -o hello.S   //编译成汇编码
gcc -c    hello.s -o hello.o   //汇编成二进制
gcc       hello.o -o hello     //链接

多文件就要生成多个.o文件,然后用以下命令链接起来

gcc 1.o 2.o 3.o -o hello

当然如果目录里只放需要的文件,也可以使用

gcc *.c -o hello

但是文件多了之后,只放需要的文件就几乎不可能了,何况还有子目录呢

由于文件过多,所以后来人们使用专用的脚本来处理
其中 Makefile Cmake 等是比较受欢迎的

Makefile 的用处,解决已包含头文件但还是 undefined reference to

原文:https://www.cnblogs.com/yucloud/p/Makefile.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!