Android ndk 安卓NDK:链接;错误:未定义对“的引用”;格尔斯函数

Android ndk 安卓NDK:链接;错误:未定义对“的引用”;格尔斯函数,android-ndk,Android Ndk,所以我的Android.mk上有以下内容 ... LOCAL_C_INCLUDES := $(LOCAL_PATH)/include /Users/myname/Development/Android/android-ndk-r8c/platforms/android-14/arch-arm/usr/include ... LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog 然而,当我尝试运行ndk构建时,我得到了以下结果 /Users/myname/Developm

所以我的Android.mk上有以下内容

...
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include /Users/myname/Development/Android/android-ndk-r8c/platforms/android-14/arch-arm/usr/include
...
LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog
然而,当我尝试运行ndk构建时,我得到了以下结果

/Users/myname/Development/Android/Android-ndk-r8c/toolschains/arm-linux-androideabi-4.6/prebuild/darwin-x86/bin/。/lib/gcc/arm-linux-androideabi/4.6/../../../../../../arm linux-androideabi/bin/ld:./obj/local/armeabi/libSDL.a(SDL_render_.o):在函数GLES_CreateRenderer:jni/SDL/src/render/opengles/SDL_render_GLES.c:189:错误:未定义对“glDisableClientState”的引用 collect2:ld返回了1个退出状态

当然,这似乎是一个问题,但是,编译器工作得很好。我不明白为什么链接不起作用,但编译会起作用。你知道我该怎么修吗

从ndk build V=1>build.log

更新:

好的,所以我把代码编译得很好,但是,我正在尝试升级到PRBoom+,所以我从中删除代码,并调整Android.mk以包含新的类。一旦这样做了,它似乎可以很好地编译,但是,它无法正确链接。我发现有两个主要错误

首先是涉及多个定义,然而,原始(编译链接精细)代码具有相同的多个定义

/Users/me/Development/Android/Android-ndk-r8c/toolschains/arm-linux-androideabi-4.6/prebuild/darwin-x86/bin/。/lib/gcc/arm-linux-androideabi/4.6/。/../../../../../arm linux-androideabi/bin/ld:error:./obj/local/armeabi/objs debug/prboom\u-jni/w\u-mmap.o:w\u InitCache的多重定义

另一种类型是OpenGL问题

/Users/me/Development/Android/Android-ndk-r8c/toolschains/arm-linux-androideabi-4.6/prebuild/darwin-x86/bin/。/lib/gcc/arm-linux-androideabi/4.6/../../../../../../arm linux-androideabi/bin/ld:./obj/local/armeabi/libSDL.a(SDL_render_.o):在函数GLES_ResetState:/Users/jackiegleason/Development/Code/prboom4android base/jni/SDL/src/render/opengles/SDL_render_GLES.c:181:错误:未定义对“glDisable”的引用

如果我将所有内容复制回来(使用PRBOAM4Android代码),所有内容都可以编译和链接

下面是两个Android.mk文件的差异

< LOCAL_C_INCLUDES:= $(LOCAL_PATH) $(LOCAL_PATH)/include $(LOCAL_PATH)/../SDL_net/include $(LOCAL_PATH)/../SDL/include $(LOCAL_PATH)/MUSIC $(LOCAL_PATH)/MUSIC/include $(LOCAL_PATH)/TEXTSCREEN $(LOCAL_PATH)/TEXTSCREEN/include
---
> LOCAL_C_INCLUDES:= $(LOCAL_PATH) $(LOCAL_PATH)/include $(LOCAL_PATH)/../SDL_net/include $(LOCAL_PATH)/../SDL/include
28c28
<   f_finale.c p_enemy.c p_spec.c r_plane.c w_mmap.c i_capture.c \
---
>   f_finale.c p_enemy.c p_spec.c r_plane.c w_mmap.c \
31,36c31,33
<   m_bbox.c p_inter.c p_tick.c r_things.c z_zone.c s_advsound.c memio.c \
<   d_client.c i_video.c i_network.c i_system.c PCSOUND/pcsound.c PCSOUND/pcsound_sdl.c SDL/i_sshot.c \
<   i_main.c sc_man.c SDL/i_sound.c jni_doom.c mus2mid.c pcm2wav.c e6y.c SDL/i_joy.c \
<         r_screenmultiply.c hu_tracers.c i_smp.c g_overflow.c i_pcsound.c \
<         MUSIC/dbopl.c MUSIC/flplayer.c MUSIC/portmidiplayer.c MUSIC/midifile.c MUSIC/opl_queue.c MUSIC/vorbisplayer.c MUSIC/dumbplayer.c MUSIC/oplplayer.c MUSIC/madplayer.c MUSIC/opl.c \
<         TEXTSCREEN/txt_button.c TEXTSCREEN/txt_separator.c TEXTSCREEN/txt_gui.c TEXTSCREEN/txt_widget.c TEXTSCREEN/txt_checkbox.c TEXTSCREEN/txt_radiobutton.c TEXTSCREEN/txt_inputbox.c TEXTSCREEN/txt_spinctrl.c TEXTSCREEN/txt_window.c TEXTSCREEN/txt_desktop.c TEXTSCREEN/txt_scrollpane.c TEXTSCREEN/txt_io.c TEXTSCREEN/txt_strut.c TEXTSCREEN/txt_window_action.c TEXTSCREEN/txt_dropdown.c TEXTSCREEN/txt_sdl.c TEXTSCREEN/txt_label.c  TEXTSCREEN/txt_table.c 
---
>   m_bbox.c p_inter.c p_tick.c r_things.c z_zone.c \
>   d_client.c i_video.c i_network.c i_system.c \
>   i_main.c i_sound.c jni_doom.c mmus2mid.c pcm2wav.c
本地路径包括:=$(本地路径)$(本地路径)/包括$(本地路径)/../SDL\U网络/包括$(本地路径)/../SDL/include
28c28
f_finale.c p_敌人.c p_规范.c r_飞机.c w_mmap.c\
31,36c31,33
m_bbox.c p_inter.c p_tick.c r_things.c z_zone.c\
>c i_client.c i_video.c i_network.c i_system.c\
>i_main.c i_sound.c jni_doom.c mmus2mid.c pcm2wav.c

是的,我可以下载你的

您的构建使用的是
APP\u PLATFORM=android-3
,它没有必要的GL库。您可以在应用程序.mk中设置
APP\u PLATFORM=android-14
,或者为您的android项目设置目标平台(Eclipse将更新项目.properties文件)


您不应在您的android.mk中手动添加android-14 Include。当您拥有正确的应用程序平台时,将相应地调整包含路径。

请运行
ndk build V=1
并发布生成日志。当我们看到你的编译和链接参数时,很容易回答你的问题。听起来不错,我可以这样做,但是,发布它的最佳方式是什么?我应该把日志放在某个地方,还是将其嵌入问题中?如果该文件不起作用,请告诉我,我以前从未使用过该网站关于
W_InitCache
:在扩展项目中只需grep这个符号。关于
glDisable
:只需从
-lGLESv1\u CM
切换到
-lGLESv2
,谢谢,我稍后会看一下!好吧,我试过了,虽然这可能是一个问题,但并没有解决问题。我会在一分钟内为主描述添加更多细节,这可能会有所帮助。ps,我不是真的在使用eclipseEclipse,Clipse可能只创建project.properties文件;如果您在Application.mk中设置APP_PLATFORM,这一点都不重要。