在调用函数之前声明函数时出现链接器错误

Linker error when declaring a function just before calling it

本文关键字:函数 链接 错误 声明 调用      更新时间:2023-10-16

我的游戏中有一个包含以下代码的更新函数:

void DrawMiniFPSCounter();
DrawMiniFPSCounter();

DrawMiniFPSCounter()函数在一个名为miniFPSCounter.cpp的文件中声明,该文件是构建目标的一部分(我使用的是Xcode)。构建时,我收到一个链接器错误,指出找不到DrawMiniFPSCounter符号。我尝试删除上面的声明并仅调用DrawMiniFPSCounter()但这会导致编译期间出现"找不到符号"错误。为什么链接器找不到此符号?这与项目中解析符号的顺序有关吗?

编辑:我在构建目录中nm hrMiniFPSCounter.o | grep Draw运行命令,并得到以下输出:

00000000 T __Z15DrawMiniCounteriiiii
0002d040 S __Z15DrawMiniCounteriiiii.eh
00000a00 T __Z18DrawMiniFPSCounterv
0002d148 S __Z18DrawMiniFPSCounterv.eh
00000560 t __ZL9DrawDigitiiib
0002d128 s __ZL9DrawDigitiiib.eh

这正常吗?为什么函数名称末尾有额外的字符?

根据我的经验,最常见的"错误":

  1. 文件(真的)编译了吗?
  2. 它(真的)链接正确吗?
  3. 您是否为函数起了您认为的名称?
  4. 命名空间问题:)

您确定 miniFPSCounter.cpp 文件已编译(/已以正确的方式包含在项目中)?我想您正在经历的事情可能是由一些不同的事情引起的,但是在缺乏更多信息的情况下,我会说:尝试确保cpp文件正在编译(可能会引入一些语法错误,如果确实编译了,则会导致编译错误),并且当您确定这一点时, 您可以开始检查其他内容(例如它是否正确链接等)

编辑:将清单放在顶部。