我们的Android静态库格式错误

时间:2017-08-16 07:01:58

标签: android static-libraries abi

我们在armeabi-v7a上使用hugin应用程序创建了静态库,我们尝试使用Cmakelist将其与Android中的共享库连接。我们可以看到库和他的标题没有任何问题,但是当我尝试编译时,它失败了这个错误:

  
    

构建命令失败。

    执行进程时发生错误

.... \ cmake \ 3.6.3155560 \ bin \ cmake.exe参数{ - build .... \ OpenCVExample-master \ app.externalNativeBuild \ cmake \ debug \ arm64-v8a --target native-lib}
    [1/2]构建CXX对象CMakeFiles / native-lib.dir / src / main / cpp / native-lib.cpp.o

    [2/2]链接CXX共享库........ \ build \ intermediates \ cmake \ debug \ obj \ arm64-v8a \ libnative-lib.so     失败:cmd.exe / C" cd。 &安培;&安培; .... \ ndk-bundle \ toolchains \ llvm \ prebuilt \ windows-x86_64 \ bin \ clang ++。exe --target = aarch64-none-linux-android --gcc-toolchain = .. / .. / ndk-bundle /toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64 --sysroot = .. / .. / ndk-bundle / platforms / android-21 / arch-arm64 -fPIC -g -DANDROID -ffunction-sections - funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa, - noexecstack -Wformat -Werror = format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-规范前缀-Wa, - noexecstack -Wformat -Werror = format-security -std = c ++ 11 -frtti -fexceptions -std = gnu ++ 11 -O0 -fno-limit-debug-info -O0 -fno- limit-debug-info -Wl, - build-id -Wl, - warn-shared-textrel -Wl, - fatal-warnings -Wl, - no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl, - build-id -Wl, - warn-shared-textrel -Wl, - fatal-warnings -Wl, - no-undefined -Wl ,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ........ \ bu ild \ intermediates \ cmake \ debug \ obj \ arm64-v8a \ libnative-lib.so CMakeFiles / native-lib.dir / src / main / cpp / native-lib.cpp.o ../../../。 ./src/main/jniLibs/arm64-v8a/libhugin.a ../../../../src/main/jniLibs/arm64-v8a/libopencv_java3.so -lm" .... \ NDK束/源/ CXX-STL / GNU-的libstdc ++ / 4.9 /库/ arm64-V8A / libgnustl_static.a" &安培;&安培; cd。"

    ../../../../src/main/jniLibs/arm64-v8a/libhugin.a:错误添加符号:文件格式错误

      clang ++。exe:错误:链接器命令失败,退出代码为1(使用-v查看调用)

      忍者:构建停止:子命令失败。

  

我们知道我们的设备使用arm64-v8a ABI,但是我们在将静态库编译到这个架构时遇到了严重的问题,所以我们使用armeabi-v7a。根据下面这篇文章,它应该是兼容的。

Is arm64-v8a compatible with armeabi-v7a?

你知道我们的静态库或项目有什么问题吗?非常感谢你

2 个答案:

答案 0 :(得分:0)

armeabi-v7a apk可以在arm64平台上运行;但要编译成arm64 apk,需要arm64 lib编译成arm64 app(apk)

答案 1 :(得分:0)

对于aarch64,我在clang中遇到了类似的问题 在我的情况下,静态库是在启用了lto的情况下编译的-我在cmake中有以下一行

target_compile_options(addrlib PRIVATE -flto=thin)

我建议您确认已为静态库禁用LTO

此外,您可能想确认静态库src / main / jniLibs / arm64-v8a / libhugin。目标架构与共享库架构相同 您可以尝试以下方法

# from src/main/jniLibs/arm64-v8a/
mdkir test
cd test
ar -x ../libhugin.a
# you would get some amount of object files from the static lib
file <object file name>.o
<object file name>.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped

此外,请参见此处How to see the compilation platform of a static library file