我正在用C++编写一个安卓应用程序。使用OpenGL E.S2、Android r7 (platform-9)、OpenJDK和Ubuntu12.04。
我遇到的问题是,我的主库(它应该调用我正在开发的引擎)正在抛出“未定义的android_main引用”错误。我不知道它为什么要这么做,但我几乎肯定它与我的Android.mk有关。不管是什么原因,我都搞不清楚。
虽然引擎库构建得非常好,但引用构成实际游戏的文件的主Android.mk并没有以我希望的方式构建。
目标
-我希望这个链接到-loptim,这样它就可以引用和调用引擎中的函数作为一个单独的库。因此,我应该能够将这个引擎移植到其他各种项目中,并将其简单地链接起来。这似乎已经完成了,不过如果别人有更好的方法来完成这一任务,我会全神贯注地倾听。
-我也想弄清楚为什么我的android_main没有被引用,以及可以做些什么来修复它。
Main.cpp
#include "engine/stdafx.hpp"
#include "engine/AppData.hpp"
#include "engine/Engine.hpp"
#include "glm/glm.hpp"
using namespace optim;
void android_main( android_app* application )
{
AppData appData;
appData.mApplication = application;
appData.mGraphicsService = new GraphicsService( application );
Engine app( &appData );
}Android.mk
MY_LOCAL_PATH := $(call my-dir)
LOCAL_PATH := $(MY_LOCAL_PATH)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/engine/Android.mk
include $(CLEAR_VARS)
LOCAL_PATH := $(MY_LOCAL_PATH)
LOCAL_CFLAGS := -I$(LOCAL_PATH)/glm -I$(ANDROID_NDK)/sources/cxx-stl/stlport/stlport -I$(LOCAL_PATH)/ -I$(LOCAL_PATH)/engine
LOCAL_MODULE := pongdroid
LOCAL_SRC_FILES := Main.cpp PongDroid.cpp
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv2 -L$(PONGDROID_DEV)/obj/local/armeabi/ -loptim
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)注意,-loptim是我要链接主模块的引擎的共享库。问题是,虽然它的链接看起来非常好,但是这个makefile的库特别不会生成一个shared_library。然而,其他一切似乎都编译得很好。
NDK-构建
**** Build of configuration Default for project pongdroid ****
ndk-build all
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : optim <= Engine.cpp
Compile++ thumb : optim <= Config.cpp
Compile++ thumb : optim <= GraphicsService.cpp
Compile thumb : android_native_app_glue <= android_native_app_glue.c
StaticLibrary : libandroid_native_app_glue.a
StaticLibrary : libstdc++.a
SharedLibrary : liboptim.so
./obj/local/armeabi/libandroid_native_app_glue.a(android_native_app_glue.o): In function `android_app_entry':
/home/amsterdam/Android/android-ndk/sources/android/native_app_glue/android_native_app_glue.c:234: undefined reference to `android_main'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/liboptim.so] Error 1
**** Build Finished ****更新
所以,我把问题缩小了一点。问题在于根Android.mk文件由于某种原因似乎忽略了自己的库。更奇怪的是,当我注释掉include $(LOCAL_PATH)/engine/Android.mk时,错误输出会变得更糟。
所以,我张贴我的engine/Android.mk文件,以清楚,看看是否有人能理解这混乱.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -I$(LOCAL_PATH)/
LOCAL_MODULE := optim
LOCAL_SRC_FILES := Engine.cpp Config.cpp GraphicsService.cpp
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv2
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue) 更新2
从外壳调用ndk-build pongdroid。
ndk-build pongdroid
Compile++ thumb : pongdroid <= Main.cpp
Compile++ thumb : pongdroid <= PongDroid.cpp
SharedLibrary : liboptim.so
/home/amsterdam/Programming/Android/pongdroid/obj/local/armeabi/libandroid_native_app_glue.a(android_native_app_glue.o): In function `android_app_entry':
/home/amsterdam/Android/android-ndk/sources/android/native_app_glue/android_native_app_glue.c:234: undefined reference to `android_main'
collect2: ld returned 1 exit status
make: *** [/home/amsterdam/Programming/Android/pongdroid/obj/local/armeabi/liboptim.so] Error 1发布于 2012-04-24 07:24:30
您是将"android_native_app_glue.h“标头包含在Main.cpp中,还是将其包含的标题之一包括在内?
https://stackoverflow.com/questions/10293101
复制相似问题