【问题标题】:error porting cocos2d-x win32 project to Android?将 cocos2d-x win32 项目移植到 Android 时出错?
【发布时间】:2014-04-10 09:11:07
【问题描述】:

我在 cocos2d-x win32 项目上工作了很长时间。新的我想将我的项目移植到 Android 项目。我将proj.android 导入Eclipse 并解决了一些错误。不幸的是,我不小心删除了project properties>C/C++ general>Paths and Symbols>Includes 下的一些includes。现在我遇到了这个错误。我该如何解决。我正在使用 cocos2d-x 2.1.5 和 Android NDK r8e。

D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: error: ./obj/local/armeabi/libcocos2d.a: member at 8799706 is not an ELF object
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/liblua.a(LuaCocos2d.o): in function tolua_Cocos2d_CCEGLViewProtocol_getScaleY00(lua_State*):D:\graduation_project\cocos2d-x-2.1.5/scripting/lua/proj.android/../cocos2dx_support/LuaCocos2d.cpp:8905: error: undefined reference to 'cocos2d::CCEGLViewProtocol::getScaleY() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/liblua.a(LuaCocos2d.o): in function tolua_Cocos2d_CCEGLViewProtocol_getScaleX00(lua_State*):D:\graduation_project\cocos2d-x-2.1.5/scripting/lua/proj.android/../cocos2dx_support/LuaCocos2d.cpp:8873: error: undefined reference to 'cocos2d::CCEGLViewProtocol::getScaleX() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/liblua.a(LuaCocos2d.o): in function tolua_Cocos2d_CCEGLViewProtocol_getViewPortRect00(lua_State*):D:\graduation_project\cocos2d-x-2.1.5/scripting/lua/proj.android/../cocos2dx_support/LuaCocos2d.cpp:8841: error: undefined reference to 'cocos2d::CCEGLViewProtocol::getViewPortRect() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libextension.a(CCScrollView.o): in function .LTHUNK25:D:\graduation_project\cocos2d-x-2.1.5/extensions/GUI/CCScrollView/CCScrollView.cpp:38: error: undefined reference to 'cocos2d::CCEGLViewProtocol::getScaleX() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libextension.a(CCScrollView.o): in function .LTHUNK25:D:\graduation_project\cocos2d-x-2.1.5/extensions/GUI/CCScrollView/CCScrollView.cpp:38: error: undefined reference to 'cocos2d::CCEGLViewProtocol::getScaleY() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function cocos2d::CCEGLView::~CCEGLView():D:\graduation_project\cocos2d-x-2.1.5/cocos2dx/platform/android/CCEGLView.cpp:66: error: undefined reference to 'cocos2d::CCEGLViewProtocol::~CCEGLViewProtocol()'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function cocos2d::CCEGLView::CCEGLView():D:\graduation_project\cocos2d-x-2.1.5/cocos2dx/platform/android/CCEGLView.cpp:58: error: undefined reference to 'cocos2d::CCEGLViewProtocol::CCEGLViewProtocol()'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function typeinfo for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x8): error: undefined reference to 'typeinfo for cocos2d::CCEGLViewProtocol'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x30): error: undefined reference to 'cocos2d::CCEGLViewProtocol::getFrameSize() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x34): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setFrameSize(float, float)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x38): error: undefined reference to 'cocos2d::CCEGLViewProtocol::getVisibleSize() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x3c): error: undefined reference to 'cocos2d::CCEGLViewProtocol::getVisibleOrigin() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x40): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setDesignResolutionSize(float, float, ResolutionPolicy)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x44): error: undefined reference to 'cocos2d::CCEGLViewProtocol::getDesignResolutionSize() const'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x48): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setTouchDelegate(cocos2d::EGLTouchDelegate*)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x4c): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setViewPortInPoints(float, float, float, float)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x50): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setScissorInPoints(float, float, float, float)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x54): error: undefined reference to 'cocos2d::CCEGLViewProtocol::isScissorEnabled()'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x58): error: undefined reference to 'cocos2d::CCEGLViewProtocol::getScissorRect()'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x5c): error: undefined reference to 'cocos2d::CCEGLViewProtocol::setViewName(char const*)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x60): error: undefined reference to 'cocos2d::CCEGLViewProtocol::handleTouchesBegin(int, int*, float*, float*)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x64): error: undefined reference to 'cocos2d::CCEGLViewProtocol::handleTouchesMove(int, int*, float*, float*)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x68): error: undefined reference to 'cocos2d::CCEGLViewProtocol::handleTouchesEnd(int, int*, float*, float*)'
D:/graduation_project/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCEGLView.o): in function vtable for cocos2d::CCEGLView:CCEGLView.cpp(.data.rel.ro+0x6c): error: undefined reference to 'cocos2d::CCEGLViewProtocol::handleTouchesCancel(int, int*, float*, float*)'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libcocos2dcpp.so] Error 1

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/sqlite3.c \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/BackgroundLayer.cpp \
                   ../../Classes/Bujian.cpp \
                   ../../Classes/Character.cpp \
                   ../../Classes/HanziManage.cpp \
                   ../../Classes/HcharacterDrawnode.cpp \
                   ../../Classes/HcharacterLayer.cpp \
                   ../../Classes/HclcData.cpp \
                   ../../Classes/JudgeManager.cpp \
                   ../../Classes/LianxiScene.cpp \
                   ../../Classes/LuaScriptReader.cpp \
                   ../../Classes/PopLayer.cpp \
                   ../../Classes/ReadXML.cpp \
                   ../../Classes/Splash.cpp \
                   ../../Classes/Stroke.cpp \
                   ../../Classes/StrokeDrawnode.cpp \
                   ../../Classes/StrokeNode.cpp \
                   ../../Classes/TcharacterDrawnode.cpp \
                   ../../Classes/TcharacterLayer.cpp \
                   ../../Classes/Tianzige.cpp \
                   ../../Classes/TouchLayer.cpp \
                   ../../Classes/WallScene.cpp \
                   ../../Classes/tinystr.cpp \
                   ../../Classes/tinyxml.cpp \
                   ../../Classes/tinyxmlerror.cpp \
                   ../../Classes/tinyxmlparser.cpp \
                   ../../Classes/MoveToRightPlaceInterval.cpp \
                   ../../Classes/SqliteHelper.cpp \
                   ../../Classes/CharacterEntity.cpp \

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes\

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += luajit_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
$(call import-module,scripting/lua/proj.android)

应用程序.mk

APP_STL := stlport_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1
APP_CFLAGS += -Wno-error=format-security

【问题讨论】:

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


    【解决方案1】:

    error: undefined reference to 可能是由于您的Android.mk 中包含不正确的内容

    我相信你在包含静态库的地方犯了语法错误:

    LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
    

    应该是:

    LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
    

    【讨论】:

    • 您在声明APP_CFLAGS += -Wno-error=format-security 中也有问题。在此处将 + 替换为 :。您是使用 eclipse 构建项目还是仅使用命令构建 NDK 项目?在构建项目之前,您是否清理了所有旧的 obj 文件?
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多