ld:找不到架构armv7的符号 - 使用库?

时间:2014-01-02 05:20:57

标签: c++ cocos2d-x

我使用Cocos2D-X,给出以下代码片段:

CCSwipeGestureRecognizer * swipe = CCSwipeGestureRecognizer::create();
swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe));
swipe->setDirection(kSwipeGestureRecognizerDirectionRight | kSwipeGestureRecognizerDirectionLeft);
swipe->setCancelsTouchesInView(true);
this->addChild(swipe);

我将提供的CPP和H文件复制到我给出的文件上,然后将它们添加到目标中。但是,出于某种原因......这一行:

swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe));

给了我一些问题。我甚至无法弄清楚它在问我什么 - 更不用说要链接什么了。标题包含并编译。

    Undefined symbols for architecture armv7:
  "GameplayScene::didSwipe(cocos2d::CCObject*)", referenced from:
      GameplayScene::init() in GameplayScene.o
ld: symbol(s) not found for architecture armv7

注释掉setTarget行可以使一切正常。

1 个答案:

答案 0 :(得分:1)

这里的简单答案是函数未正确定义。它被定义为:

void didSwipe(CCObject* obj)
{
   exit(0);
}

应该是:

void GameplayScene::didSwipe(CCObject* obj)
{
   exit(0);
}

也就是说,类的成员函数的实现而不仅仅是文件中的一个函数。

但我想强调一下,虽然这可能是确切问题的答案,但我认为这不是解决这个问题的原因。

某些编辑可能会因为主题而进入并清除它,但无论如何我都会把它放进去......

假设:

  1. 作者在看到这段代码之前确实已经看了一段时间(我正和他聊天......因为看起来至少还有一个人在我面前......在它被发现之前)。 / p>

  2. 作者在评论中发布了API,问题仍然不明显。

  3. 所有讨论和看过这个问题的人都是(合理地)健全的思想,身体,并且至少有一个基本的理解,你实际上必须告诉编译器一个函数是类函数的实现而不只是一个“功能”。

  4. 我认为这个问题的真正答案是:

    1. 午夜后不要尝试编写代码......除非你天生就是夜间活动。

    2. 不要试图帮助人们在午夜之后调试他们的代码......除非你是天生的夜间活动。

    3. 如果问题在您看了一个多小时后在解决方案中显得不明显,请离开并稍后再回来。

    4. 不要在午夜之后喂养开发者,否则他们可能会变坏。

    5. 是的,我们都破坏了这些规则。