Android: can't compile Allegro with WANT_GLES3=on
Closed this issue · 0 comments
alemart commented
Compiling Allegro 5.2.8 for Android doesn't work if WANT_GLES3 is enabled. It complains of two undefined symbols: glRenderbufferStorageMultisample
and glFramebufferTexture2DMultisampleEXT
.
As you can see below, Allegro is linked to libGLESv2.so instead of libGLESv3.so. glRenderbufferStorageMultisample
requires version 3. In addition, glFramebufferTexture2DMultisampleEXT
seems to be present on libGLESv3.so (and v2) starting from API level 28 only.
Linking with libGLESv2.so instead of libGLESv3.so:
[ 0%] Linking C shared library lib/liballegro.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/allegro.dir/link.txt --verbose=1
/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=aarch64-none-linux-android21 --gcc-toolchain=/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -W -Wall -Wpointer-arith -Wmissing-declarations -Wstrict-prototypes -O2 -g -DNDEBUG -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,liballegro.so -o lib/liballegro.so CMakeFiles/allegro.dir/src/allegro.c.o CMakeFiles/allegro.dir/src/bitmap.c.o CMakeFiles/allegro.dir/src/bitmap_draw.c.o CMakeFiles/allegro.dir/src/bitmap_io.c.o CMakeFiles/allegro.dir/src/bitmap_lock.c.o CMakeFiles/allegro.dir/src/bitmap_pixel.c.o CMakeFiles/allegro.dir/src/bitmap_type.c.o CMakeFiles/allegro.dir/src/blenders.c.o CMakeFiles/allegro.dir/src/clipboard.c.o CMakeFiles/allegro.dir/src/config.c.o CMakeFiles/allegro.dir/src/convert.c.o CMakeFiles/allegro.dir/src/cpu.c.o CMakeFiles/allegro.dir/src/debug.c.o CMakeFiles/allegro.dir/src/display.c.o CMakeFiles/allegro.dir/src/display_settings.c.o CMakeFiles/allegro.dir/src/drawing.c.o CMakeFiles/allegro.dir/src/dtor.c.o CMakeFiles/allegro.dir/src/events.c.o CMakeFiles/allegro.dir/src/evtsrc.c.o CMakeFiles/allegro.dir/src/exitfunc.c.o CMakeFiles/allegro.dir/src/file.c.o CMakeFiles/allegro.dir/src/file_slice.c.o CMakeFiles/allegro.dir/src/file_stdio.c.o CMakeFiles/allegro.dir/src/fshook.c.o CMakeFiles/allegro.dir/src/fshook_stdio.c.o CMakeFiles/allegro.dir/src/fullscreen_mode.c.o CMakeFiles/allegro.dir/src/haptic.c.o CMakeFiles/allegro.dir/src/inline.c.o CMakeFiles/allegro.dir/src/joynu.c.o CMakeFiles/allegro.dir/src/keybdnu.c.o CMakeFiles/allegro.dir/src/libc.c.o CMakeFiles/allegro.dir/src/math.c.o CMakeFiles/allegro.dir/src/memblit.c.o CMakeFiles/allegro.dir/src/memdraw.c.o CMakeFiles/allegro.dir/src/memory.c.o CMakeFiles/allegro.dir/src/monitor.c.o CMakeFiles/allegro.dir/src/mousenu.c.o CMakeFiles/allegro.dir/src/mouse_cursor.c.o CMakeFiles/allegro.dir/src/path.c.o CMakeFiles/allegro.dir/src/pixels.c.o CMakeFiles/allegro.dir/src/shader.c.o CMakeFiles/allegro.dir/src/system.c.o CMakeFiles/allegro.dir/src/threads.c.o CMakeFiles/allegro.dir/src/timernu.c.o CMakeFiles/allegro.dir/src/tls.c.o CMakeFiles/allegro.dir/src/touch_input.c.o CMakeFiles/allegro.dir/src/transformations.c.o CMakeFiles/allegro.dir/src/tri_soft.c.o CMakeFiles/allegro.dir/src/utf8.c.o CMakeFiles/allegro.dir/src/misc/aatree.c.o CMakeFiles/allegro.dir/src/misc/bstrlib.c.o CMakeFiles/allegro.dir/src/misc/list.c.o CMakeFiles/allegro.dir/src/misc/vector.c.o CMakeFiles/allegro.dir/src/unix/ufdwatch.c.o CMakeFiles/allegro.dir/src/unix/utime.c.o CMakeFiles/allegro.dir/src/unix/uxthread.c.o CMakeFiles/allegro.dir/src/android/android_apk_file.c.o CMakeFiles/allegro.dir/src/android/android_clipboard.c.o CMakeFiles/allegro.dir/src/android/android_display.c.o CMakeFiles/allegro.dir/src/android/android_image.c.o CMakeFiles/allegro.dir/src/android/android_input_stream.c.o CMakeFiles/allegro.dir/src/android/android_joystick.c.o CMakeFiles/allegro.dir/src/android/android_keyboard.c.o CMakeFiles/allegro.dir/src/android/android_mouse.c.o CMakeFiles/allegro.dir/src/android/android_sensors.c.o CMakeFiles/allegro.dir/src/android/android_system.c.o CMakeFiles/allegro.dir/src/android/android_touch.c.o CMakeFiles/allegro.dir/src/android/jni_helpers.c.o CMakeFiles/allegro.dir/src/linux/ljoynu.c.o CMakeFiles/allegro.dir/src/android/android_apk_fs.c.o CMakeFiles/allegro.dir/src/opengl/extensions.c.o CMakeFiles/allegro.dir/src/opengl/ogl_bitmap.c.o CMakeFiles/allegro.dir/src/opengl/ogl_display.c.o CMakeFiles/allegro.dir/src/opengl/ogl_draw.c.o CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o CMakeFiles/allegro.dir/src/opengl/ogl_lock.c.o CMakeFiles/allegro.dir/src/opengl/ogl_lock_es.c.o CMakeFiles/allegro.dir/src/opengl/ogl_render_state.c.o CMakeFiles/allegro.dir/src/opengl/ogl_shader.c.o -lm -llog /usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libGLESv2.so /usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libEGL.so -latomic -lm
ld: error: undefined symbol: glRenderbufferStorageMultisample
>>> referenced by ogl_fbo.c:199 (/home/alexandre/allegro-5.2.8.0-android-new/src/opengl/ogl_fbo.c:199)
>>> CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o:(attach_depth_buffer)
ld: error: undefined symbol: glFramebufferTexture2DMultisampleEXT
>>> referenced by ogl_fbo.c:626 (/home/alexandre/allegro-5.2.8.0-android-new/src/opengl/ogl_fbo.c:626)
>>> CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o:(_al_ogl_setup_fbo_non_backbuffer)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/allegro.dir/build.make:1259: lib/liballegro.so] Error 1
make[2]: Leaving directory '/home/alexandre/allegro-5.2.8.0-android-new/build_arm64-v8a'
make[1]: *** [CMakeFiles/Makefile2:369: CMakeFiles/allegro.dir/all] Error 2
make[1]: Leaving directory '/home/alexandre/allegro-5.2.8.0-android-new/build_arm64-v8a'
make: *** [Makefile:133: all] Error 2
Inspecting the symbols of libGLESv3.so (API Level 27):
alexandre@alenot:/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/27$ nm -gD libGLESv3.so | grep glFramebuffer
00000000000073c0 T glFramebufferParameteri
00000000000073c8 T glFramebufferRenderbuffer
00000000000073d0 T glFramebufferTexture
00000000000073d8 T glFramebufferTexture2D
00000000000073e0 T glFramebufferTexture3DOES
00000000000073e8 T glFramebufferTextureEXT
00000000000073f0 T glFramebufferTextureLayer
Inspecting the symbols of libGLESv3.so (API Level 28):
alexandre@alenot:/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/28$ nm -gD libGLESv3.so | grep glFramebuffer
00000000000073d8 T glFramebufferParameteri
00000000000073e0 T glFramebufferRenderbuffer
00000000000073e8 T glFramebufferTexture
00000000000073f0 T glFramebufferTexture2D
00000000000073f8 T glFramebufferTexture2DMultisampleEXT
0000000000007400 T glFramebufferTexture3DOES
0000000000007408 T glFramebufferTextureEXT
0000000000007410 T glFramebufferTextureLayer
0000000000007418 T glFramebufferTextureMultisampleMultiviewOVR
0000000000007420 T glFramebufferTextureMultiviewOVR