我有一个在Xcode中完全正常运行但在Eclipse ADT中没有编译的项目。我以前成功编译并运行了android应用程序,但这是我第一次创建自定义类。复制问题:
我创建了一个新项目,然后添加以下两个文件:
//Enemy.cpp
#include "Enemy.h"
USING_NS_CC;
bool Enemy::init()
{
if(!Layer::init())
return false;
return true;
}
//Enemy.h
#ifndef __ColorMirror__Enemy__
#define __ColorMirror__Enemy__
#include <iostream>
#include "cocos2d.h"
USING_NS_CC;
class Enemy : public cocos2d::Layer{
public:
CREATE_FUNC(Enemy);
virtual bool init();
};
#endif
我能够在Eclipse的类列表中看到它们。
然后我在HelloWorldScene.cpp中创建一个新的敌人,如下所示:
Enemy *newEnemy = Enemy::create();
这在Xcode中编译并按预期运行,但是当我运行build_native.py时,我收到以下错误:
jni/../../Classes/Enemy.h:19: error: undefined reference to 'Enemy::init()'
jni/../../Classes/Enemy.h:19: error: undefined reference to 'vtable for Enemy'
检入jni /../../ Classes文件,我能找到Enemy.h和Enemy.cpp。
我在其他版本的Eclipse中看到了几个修复的解释,并且建议它是链接器错误,但我还没弄清楚如何在ADT中修复它。
谢谢!
答案 0 :(得分:0)
所以我不完全确定这些步骤中的哪一个解决了问题,而且很可能是多个问题,但这就是我所做的:
1)将Enemy.cpp添加到Android.mk中,如下所示:
Browse to game folder /proj.android/jni and open Android.mk
Open with TextEdit
Below the AppDelegate.cpp in LOCAL_SRC_FILES: added this:
../../Classes/Enemy.cpp \
Save
(仍然没有工作,所以我把它拿出来)
2)更改了Eclipse的工作空间(在打开eclipse时指定)并删除了旧工作空间
3)下载并设置最新的ADT包(Eclipse JUNO)
4)将Cocos2d-x从3.1升级到3.2
(仍然没有工作)
5)再次将Enemy.cpp添加到Android.mk
完成所有这些步骤后,一切都运行良好,并像以前一样进行编译。
感谢Wez Sie Tato确认Enemy.cpp确实需要添加到Android.mk ...基于我在其他地方看到的一些评论,看来我的ADT包装可能已经损坏不知何故,与Android.mk中没有正确的行相结合