首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android正确地将应用程序与-lGLESv3连接为64位arm,而不是32位arm

Android正确地将应用程序与-lGLESv3连接为64位arm,而不是32位arm
EN

Stack Overflow用户
提问于 2018-03-06 23:27:40
回答 1查看 1.3K关注 0票数 3

我有一个使用OpenGL ES3的安卓应用程序。我可以为我的64位android设备构建(并运行)它。

当我尝试将其构建为32位时,链接器无法找到libGLESv3库,并且无法构建。

在我的应用程序的gradle中,我有:

代码语言:javascript
复制
compileSdkVersion 26
defaultConfig {
    applicationId "com.steenriver.biplane"
    minSdkVersion 16
    targetSdkVersion 19
    versionCode 113
    versionName "1.13"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    ndk {
        abiFilters 'armeabi-v7a'
        //abiFilters 'arm64-v8a'
    }
    externalNativeBuild {
        cmake {
            //ldFlags "-Wl,-fuse-ld=gold"
            cppFlags "-std=c++11 -DANDROID=1 -DPLAY=1 -DUSEES3=1 -DLOGTAG=biplane"
            arguments "-DCMAKE_VERBOSE_MAKEFILE=1", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_ARM_MODE=arm"
        }
    }

}

使用arm64-v8a,没有问题。

使用armeabi-v7a (在做了一个干净的项目之后),我得到:

/home/bram/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld.gold:错误:找不到-lGLESv3

我在Ubuntu上使用Android 3.0.1。我在我的-lGLESv3中指定CMakeLists.txt为:

代码语言:javascript
复制
target_link_libraries(biplane
  gpg
  pi
  uif
  gbase
  dblunt
  gpgoap
  opende
  freealut
  openal
  EGL
  GLESv3
  OpenSLES
  android
  log
  z
  m
)

链接器的完整命令行是:

代码语言:javascript
复制
/home/bram/android-sdk-linux/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++  --target=armv7-none-linux-androideabi --gcc-toolchain=/home/bram/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/bram/android-sdk-linux/ndk-bundle/sysroot -fPIC -isystem /home/bram/android-sdk-linux/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=16 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -marm -mfpu=neon -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++11 -DANDROID=1 -DPLAY=1 -DUSEES3=1 -DLOGTAG=biplane -DDEBUG -O0 -fno-limit-debug-info  -fuse-ld=gold -Wl,--exclude-libs,libgcc.a --sysroot /home/bram/android-sdk-linux/ndk-bundle/platforms/android-16/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libbiplane.so -o /home/bram/apps/Proto/Biplane/AndroidProject/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libbiplane.so CMakeFiles/biplane.dir/main.cpp.o CMakeFiles/biplane.dir/androidsupport.cpp.o CMakeFiles/biplane.dir/android_native_app_glue.c.o CMakeFiles/biplane.dir/StateManager.cpp.o CMakeFiles/biplane.dir/scorekeeper.cpp.o  /home/bram/src/gpg-cpp-sdk/android/lib/gnustl/armeabi-v7a/libgpg.a /home/bram/apps/Proto/Biplane/AndroidProject/app/.externalNativeBuild/cmake/PI/output/libpi.a /home/bram/apps/Proto/Biplane/AndroidProject/app/.externalNativeBuild/uif/output/libuif.a /home/bram/apps/GBase/src/output/libgbase.a /home/bram/src/dutch-blunt/src/output/libdblunt.a /home/bram/src/GPGOAP/output/libgpgoap.a /home/bram/src/opende/output/libopende.a /home/bram/src/freealut/src/output/libfreealut.a /home/bram/src/openal-soft/jni/output/libopenal.a -lEGL -lGLESv3 -lOpenSLES -landroid -llog -lz -lm -lm "/home/bram/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 23:59:56

这是由minSdkVersion 16引起的。

安卓只支持OpenGLES3,因为SDK18和更高版本。

我已经将minSdkVersion设置为19,现在也设置了armeabi-v7a链接。我不知道arm64-v8a是如何连接起来的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49141706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档