undefiend reference to 问题

使用Makefile编译时没有出错,但直接写命令编译错误,请问这是为什么:
图片描述

回答:

把MakeFile里引入的库加到编译参数里.

回答:

举个栗子吧
你有三个文件
a.c,b.c,lib.h
依赖sdl2

lib.h声明了a()/b()
a.c引用了b.c定义的b()
b.c引用了a.c定义的a()
a/b都引用了sdl2

那么要怎么编译他们?

gcc -c a.c
注意-c,这个参数告诉gcc不要执行链接这一步骤,不去尝试寻找b()的定义,这就避免了直接编译a.c会导致的undefined reference to b()的问题。
随后我们继续编译b.c
gcc -c b.c

现在我们得到了a.o/b.o两个目标代码文件
然后我们要做什么?
对,链接,把它们组合成一个可执行文件。

gcc a.o b.o -o demo -lSDL2

此时提交给gcc的两个目标代码文件a.o/b.o里分别有有a()/b()的定义,传递的参数-lSDL2也指定了需要链接SDL库。

现在,gcc能在a.o里找到a(),b.o里找到b(),libSDL.a里找到一系列SDL函数,undefined reference to的问题就此解决。

回答:

你按照make之后输出的命令,重新敲一遍命令就可以编译了。
make就是帮你把编译命令管理了一下

以上是 undefiend reference to 问题 的全部内容, 来源链接: utcz.com/p/194721.html

回到顶部