Eclipse ADT"未定义引用(自定义类)",但在Xcode中工作正常(使用Cocos2dx)

时间:2014-08-26 17:06:46

标签: android c++ eclipse xcode cocos2d-x

我有一个在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中修复它。

谢谢!

1 个答案:

答案 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中没有正确的行相结合