android - android ndk r14 的 SDL2 示例构建错误

标签 android android-ndk sdl-2 llvm-clang

我已经测试过在我的 ubuntu 16.04 机器上构建 SDL2 源代码 (2.0.5) 中的示例。

根据 https://wiki.libsdl.org/Android , 我安装了 android sdk 和 ndk r14 并设置了我的环境变量。

但是我在“简单构建”一章中使用以下命令构建失败。

cd /usr/src/SDL2/build-scripts/
 ./androidbuild.sh org.libsdl.testgles ../test/testgles.c

它会产生以下错误。

Error: The project either has no target set or the target is invalid.
Please provide a --target to the 'android update' command.
[armeabi] Compile thumb  : SDL2 <= SDL.c
[armeabi] Compile thumb  : SDL2 <= SDL_assert.c
[armeabi] Compile thumb  : SDL2 <= SDL_error.c
[armeabi] Compile thumb  : SDL2 <= SDL_hints.c
[armeabi] Compile thumb  : SDL2 <= SDL_log.c
[armeabi] Compile thumb  : SDL2 <= SDL_audio.c
[armeabi] Compile thumb  : SDL2 <= SDL_audiocvt.c
[armeabi] Compile thumb  : SDL2 <= SDL_audiodev.c
[armeabi] Compile thumb  : SDL2 <= SDL_audiotypecvt.c
[armeabi] Compile thumb  : SDL2 <= SDL_mixer.c
[armeabi] Compile thumb  : SDL2 <= SDL_wave.c
fatal error: error in backend: Cannot select: 0x43bd850: i32 = ARMISD::SSAT 0x43acfc0, Constant:i32<15>
  0x43acfc0: i32 = add 0x43ac770, 0x43bd690
    0x43ac770: i32 = sra 0x43bda80, Constant:i32<8>
      0x43bda80: i32 = add 0x43ac460, 0x43ad2d0
        0x43ac460: i32 = add 0x4399d70, 0x43bdf50
          0x4399d70: i32 = mul 0x43ad180, 0x439a160
            0x43ad180: i32,ch = load<LD2[%15](tbaa=<0x4229ab8>), sext from i16> 0x42e7b60, 0x43acaf0, undef:i32
              0x43acaf0: i32 = add 0x4399bb0, Constant:i32<2>
                0x4399bb0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg2
                  0x439a5c0: i32 = Register %vreg2
                0x4399fa0: i32 = Constant<2>
              0x43aca10: i32 = undef
            0x439a160: i32,ch = load<LD2[%12](tbaa=<0x42638a8>), sext from i16> 0x42e7b60, 0x4399ec0, undef:i32
              0x4399ec0: i32 = add 0x43ac7e0, Constant:i32<6>
                0x43ac7e0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg0
                  0x43bdd20: i32 = Register %vreg0
                0x439a710: i32 = Constant<6>
              0x43aca10: i32 = undef
          0x43bdf50: i32 = mul 0x43ac4d0, 0x439a470
            0x43ac4d0: i32,ch = load<LD2[%2](tbaa=<0x4229ab8>), sext from i16> 0x42e7b60, 0x4399bb0, undef:i32
              0x4399bb0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg2
                0x439a5c0: i32 = Register %vreg2
              0x43aca10: i32 = undef
            0x439a470: i32,ch = load<LD2[%6](tbaa=<0x42638a8>), sext from i16> 0x42e7b60, 0x439a080, undef:i32
              0x439a080: i32 = add 0x43ac7e0, Constant:i32<4>
                0x43ac7e0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg0
                  0x43bdd20: i32 = Register %vreg0
                0x43ace70: i32 = Constant<4>
              0x43aca10: i32 = undef
        0x43ad2d0: i32 = srl 0x43aca80, Constant:i32<24>
          0x43aca80: i32 = sra 0x43ac460, Constant:i32<31>
            0x43ac460: i32 = add 0x4399d70, 0x43bdf50
              0x4399d70: i32 = mul 0x43ad180, 0x439a160
                0x43ad180: i32,ch = load<LD2[%15](tbaa=<0x4229ab8>), sext from i16> 0x42e7b60, 0x43acaf0, undef:i32
                  0x43acaf0: i32 = add 0x4399bb0, Constant:i32<2>


                  0x43aca10: i32 = undef
                0x439a160: i32,ch = load<LD2[%12](tbaa=<0x42638a8>), sext from i16> 0x42e7b60, 0x4399ec0, undef:i32
                  0x4399ec0: i32 = add 0x43ac7e0, Constant:i32<6>


                  0x43aca10: i32 = undef
              0x43bdf50: i32 = mul 0x43ac4d0, 0x439a470
                0x43ac4d0: i32,ch = load<LD2[%2](tbaa=<0x4229ab8>), sext from i16> 0x42e7b60, 0x4399bb0, undef:i32
                  0x4399bb0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg2

                  0x43aca10: i32 = undef
                0x439a470: i32,ch = load<LD2[%6](tbaa=<0x42638a8>), sext from i16> 0x42e7b60, 0x439a080, undef:i32
                  0x439a080: i32 = add 0x43ac7e0, Constant:i32<4>


                  0x43aca10: i32 = undef
            0x43bd700: i32 = Constant<31>
          0x439a550: i32 = Constant<24>
      0x43acd20: i32 = Constant<8>
    0x43bd690: i32 = mul 0x43ad260, 0x43bdd90
      0x43ad260: i32,ch = load<LD2[%24](tbaa=<0x42638a8>), zext from i16> 0x42e7b60, 0x43bdc40, undef:i32
        0x43bdc40: i32 = add 0x43ac7e0, Constant:i32<2>
          0x43ac7e0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg0
            0x43bdd20: i32 = Register %vreg0
          0x4399fa0: i32 = Constant<2>
        0x43aca10: i32 = undef
      0x43bdd90: i32 = ARMISD::CMOV 0x439a390, 0x439a940, Constant:i32<0>, Register:i32 %CPSR, 0x43ac5b0
        0x439a390: i32 = add 0x439a940, Constant:i32<-16>
          0x439a940: i32 = AssertZext 0x439a6a0, ValueType:ch:i8
            0x439a6a0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg1
              0x43ace00: i32 = Register %vreg1
          0x43ac700: i32 = Constant<-16>
        0x439a940: i32 = AssertZext 0x439a6a0, ValueType:ch:i8
          0x439a6a0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg1
            0x43ace00: i32 = Register %vreg1
        0x43bdbd0: i32 = Constant<0>
        0x43ac620: i32 = Register %CPSR
        0x43ac5b0: glue = ARMISD::CMPZ 0x439a2b0, Constant:i32<0>
          0x439a2b0: i32 = and 0x439a940, Constant:i32<8>
            0x439a940: i32 = AssertZext 0x439a6a0, ValueType:ch:i8
              0x439a6a0: i32,ch = CopyFromReg 0x42e7b60, Register:i32 %vreg1
                0x43ace00: i32 = Register %vreg1
            0x43acd20: i32 = Constant<8>
          0x43bdbd0: i32 = Constant<0>
  0x43acf50: i32 = Constant<15>
In function: MS_ADPCM_nibble
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Android clang version 3.8.275480  (based on LLVM 3.8.275480)
Target: armv5te-none-linux-android
Thread model: posix
InstalledDir: /home/idkiller/android-ndk-r14/toolchains/llvm/prebuilt/linux-x86_64/bin
clang: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/SDL_wave-929d6f.c
clang: note: diagnostic msg: /tmp/SDL_wave-929d6f.sh
clang: note: diagnostic msg: 

********************
make: *** [obj/local/armeabi/objs/SDL2/src/audio/SDL_wave.o] Error 70
make: *** Waiting for unfinished jobs....
Buildfile: /home/idkiller/work17/SDL2-2.0.5/build/org.libsdl.testgles/build.xml

BUILD FAILED
/home/idkiller/work17/SDL2-2.0.5/build/org.libsdl.testgles/build.xml:56: sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable.

Total time: 0 seconds
There was an error building the APK

我认为第一个关于“android 更新”的错误可以通过在项目目录中手动执行更新命令来修复。

但我猜不出为什么LLVM后端在编译SDL_wave.c时会出现这个错误

SDL2 还不支持用 Clang 3.8 构建吗?

最佳答案

刚遇到同样的问题,我解决了,感觉真好!

我猜是编译器clang.exe引起的。

您所要做的就是编辑您的 application.mk(如果您使用的是 NDK_BUILD)

添加一行“NDK_TOOLCHAIN_VERSION=4.9(取决于您的 GCC 版本)”

关于android - android ndk r14 的 SDL2 示例构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674298/

相关文章:

java - Android - JNI 问题

android - 如何符号化剥离的共享库的堆栈跟踪

c - SDL Surfaces 数组在一定次数的重新分配后会更改内容

c++ - SDL2 渲染器给我带来了问题

c - SDL2 加载嵌入的二进制文件

android - Java/安卓 : How do you properly import a library in Eclipse?

Android 媒体录制 : java. lang.RuntimeException:启动失败

android - 我们可以使用 Android-x86 项目 VM 测试应用内结算吗?

android - 从 Jetpack Compose + Hilt + ViewModel 中的 ViewModel 导航的正确方法是什么?

java - 错误 :error: '__ANDROID_API__' macro redefined [-Werror, -Wmacro-redefined] -Android Studio