Eclipse ADT "undefined reference to (custom class)",但在 Xcode 中工作正常(使用 Cocos2dx)



我有一个项目,它在Xcode中功能齐全,但在Eclipse ADT中无法编译。我过去曾成功编译并运行过android应用程序,但这是我第一次创建自定义类。复制问题:

我创建了一个新项目,然后添加以下2个文件:

//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/..//类文件,我能够找到Enemy.h和Enemy.cpp.

我在Eclipse的其他版本中看到了一些关于修复的解释,以及这是一个链接器错误的建议,但我还没有弄清楚如何在ADT中修复它。

谢谢!

所以我不完全确定这些步骤中的哪一个解决了问题,很可能是多个问题,但我所做的是:

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中没有正确的行

最新更新