长版本:我希望在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的项目文件。
答案 0 :(得分:1)
确保您的Objective-C文件具有扩展名.mm
而不是.m
并尝试重新编译。
答案 1 :(得分:1)
你的直觉除了我的努力之外@PLJNS,谁想要细节都可以完成以下步骤。
说你有 XYZ.h & XYZ.mm 导致问题。
<强> 溶液:: 强>
选择XYZ.h&amp; XYZ.mm并删除它们,在删除对话框中选择“删除参考”
现在添加XYZ.h&amp; XYZ.mm通过“将文件添加到your_project_name”。
现在选择你所有的目标(这里我选择两个我的MobileDialerNewSt和IPA)。
快乐编码:)
答案 2 :(得分:0)
我没有意识到你包含的任何文件都必须添加到两个目标中,我这一刻就看到了那个UI。这解决了我的问题。
请务必使用XCODE将所有文件包含在所有目标中