Mac上的链接器错误,但在iOS上没有任何C ++函数

时间:2014-11-11 20:11:54

标签: c++ ios xcode macos cocos2d-x

长版本:我希望在C ++中实现我的应用程序模型,并在Cocos2d-x使用C ++的地方使用此模型,以便:(1)我知道它具有相同版本的C ++和(2)我可以在时机成熟时从Cocos2d-x中删除我的应用程序模型。我从Mac OS X和iOS开始,在开始使用这个项目之前,我确保编译好了。在iOS上,一切正常。在Mac上,基本的C ++每次都会给我一个链接器错误!

简短版本开始:我有一个类似于以下内容的C ++类:

class GetInteger {

public:
    static int GetInt();
};

到目前为止一切顺利,所以让我继续定义我的超复杂静态函数:

int GetInteger::GetInt()
{
    return 5;
}

好的,这是基本的C ++,我现在要继续使用我的超复杂功能:

"include "GetInteger.h"
...
int theInt = GetInteger::GetInt();
...

事情仍然非常简单,事实上,当我使用适用于iOS的Cocos2d-x项目的标准设置在Xcode for iOS中编译此代码时,这一切都有效。但是当我尝试在Mac上运行此代码时,会出现以下错误:

Undefined symbols for architecture x86_64:
  "GetInteger::GetInt()", referenced from:
      AppDelegate::applicationDidFinishLaunching() in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是为什么?我该如何解决这个问题?

这是我ZippyShare的项目文件。

3 个答案:

答案 0 :(得分:1)

确保您的Objective-C文件具有扩展名.mm而不是.m并尝试重新编译。

答案 1 :(得分:1)

你的直觉除了我的努力之外@PLJNS,谁想要细节都可以完成以下步骤。

说你有 XYZ.h & XYZ.mm 导致问题。

<强> 溶液::

  1. 选择XYZ.h&amp; XYZ.mm并删除它们,在删除对话框中选择“删除参考”enter image description here

  2. 现在添加XYZ.h&amp; XYZ.mm通过“将文件添加到your_project_name”。enter image description here

  3. 现在选择你所有的目标(这里我选择两个我的MobileDialerNewSt和IPA)。 enter image description here

  4. 清洁&amp;建立。
  5. 快乐编码:)

答案 2 :(得分:0)

我没有意识到你包含的任何文件都必须添加到两个目标中,我这一刻就看到了那个UI。这解决了我的问题。

请务必使用XCODE将所有文件包含在所有目标中