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

时间:2012-10-15 08:51:09

标签: c++ xcode linker clang undefined-symbol

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

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 个答案:

答案 0 :(得分:1)

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

  1. 文件(真的)是否已编译?
  2. 它(真的)是否正确链接?
  3. 你给这个功能提供了你认为你做过的名字吗?
  4. 新的命名空间问题:)
  5. 您确定编译了miniFPSCounter.cpp文件(/以正确的方式在项目中被包含在内)?我猜你所遇到的可能是由几个不同的东西造成的,但是由于缺乏更多信息,我会说:尝试确保编译cpp文件(可能会引入一些语法错误,这会导致编译错误,如果它确实编译),当你确定,你可以开始检查其他东西(例如它正确链接,等等)

    编辑:将核对清单放在最上面。

相关问题