xmake-io / xmake-gradle

A gradle plugin that integrates xmake seamlessly
https://xmake.io
Apache License 2.0
48 stars 3 forks source link

安卓 'arm64-v8a', 'armeabi-v7a', 'x86'编译问题 #4

Closed dsp2000 closed 4 years ago

dsp2000 commented 4 years ago

注:如果是问题报障或者特性请求,请选择对应issues模板,否则一律不回复。

描述问题详情

请在这描述你的问题详情。 LU )$__}S7XH0(UDER9%KK6

xmake.lua add_rules("mode.debug", "mode.release") target("native-lib") set_kind("shared") set_languages("c99", "cxx11") add_includedirs("include") add_linkdirs("libs/$(arch)") add_links("avutil"); add_files("native-lib.cpp") add_syslinks("log", "z")

Configure project :app [xmake/plugin]: activated for project: app

Task :app:xmakeConfigureForArm64

xmake f -y -v -p android -a arm64-v8a --ndk=E:\Android\sdk\ndk\21.0.6113669 --buildir=D:\ktv\TestXmake\app\build\xmake configure { ccache = true ndk = E:\Android\sdk\ndk\21.0.6113669 ndk_stdcxx = true host = windows sdk = E:\Android\sdk buildir = ......\build\xmake ndk_toolchains_ver = 4.9 ndk_sdkver = 21 arch = arm64-v8a sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ build_toolver = 28.0.3 mode = release ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cxx = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cross = aarch64-linux-android- bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin kind = static gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64 android_sdk = E:\Android\sdk plat = android ndkver = 21 }

Task :app:xmakeBuildForArm64

xmake build -v configure { ccache = true ndk = E:\Android\sdk\ndk\21.0.6113669 ndk_stdcxx = true host = windows sdk = E:\Android\sdk buildir = ......\build\xmake ndk_toolchains_ver = 4.9 ndk_sdkver = 21 arch = arm64-v8a sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ build_toolver = 28.0.3 mode = release ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cxx = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cross = aarch64-linux-android- bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin kind = static gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64 android_sdk = E:\Android\sdk plat = android ndkver = 21 } [100%]: build ok! configure { sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ ndk = E:\Android\sdk\ndk\21.0.6113669 ndk_stdcxx = true host = windows sdk = E:\Android\sdk buildir = ......\build\xmake ndk_toolchains_ver = 4.9 ndk_sdkver = 21 arch = arm64-v8a ccache = true build_toolver = 28.0.3 mode = release ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cxx = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ cross = aarch64-linux-android- bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin kind = static gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64 android_sdk = E:\Android\sdk plat = android ndkver = 21 } installing native-lib .. installing to D:\ktv\TestXmake\app\build\xmake\libs\arm64-v8a .. copy ......\build\xmake\android\arm64-v8a\release\libnative-lib.so to D:\ktv\TestXmake\app\build\xmake\libs\arm64-v8a\lib install ok!

Task :app:xmakeConfigureForArmv7

xmake f -y -v -p android -a armeabi-v7a --ndk=E:\Android\sdk\ndk\21.0.6113669 --buildir=D:\ktv\TestXmake\app\build\xmake checking for the Android SDK directory ... E:\Android\sdk checking for the Build Tools Version of Android SDK ... 28.0.3 checking for the NDK directory ... E:\Android\sdk\ndk\21.0.6113669 checking for the SDK version of NDK ... 21 checking for the toolchains version of NDK ... 4.9 checking for the arm-linux-androideabi-g++ ... no checking for the linker (ld: g++) ... no checking for the arm-linux-androideabi-gcc ... no checking for the linker (ld: gcc) ... no checking for the clang++ ... E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ checking for the linker (ld) ... clang++ checking for the shared library linker (sh: g++) ... no checking for the shared library linker (sh: gcc) ... no checking for the shared library linker (sh) ... clang++ configure { ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ ndk = E:\Android\sdk\ndk\21.0.6113669 ndk_stdcxx = true host = windows sdk = E:\Android\sdk buildir = ......\build\xmake ndk_toolchains_ver = 4.9 ndk_sdkver = 21 arch = armeabi-v7a ccache = true gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64 mode = release plat = android build_toolver = 28.0.3 cross = arm-linux-androideabi- bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin kind = static sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ android_sdk = E:\Android\sdk ndkver = 21 }

Task :app:xmakeBuildForArmv7

xmake build -v configure { ccache = true ndk = E:\Android\sdk\ndk\21.0.6113669 ndk_stdcxx = true host = windows sdk = E:\Android\sdk buildir = ......\build\xmake ndk_toolchains_ver = 4.9 ndk_sdkver = 21 arch = armeabi-v7a plat = android build_toolver = 28.0.3 mode = release bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin cross = arm-linux-androideabi- sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ kind = static gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64 android_sdk = E:\Android\sdk ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ ndkver = 21 } checking for the c++ compiler (cxx: g++) ... no checking for the c++ compiler (cxx) ... clang++ checking for the E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ ... ok checking for the flags (-Oz) ... ok [ 75%]: linking.release libnative-lib.so E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ -o ......\build\xmake\android\armeabi-v7a\release\libnative-lib.so ......\build\xmake.objs\native-lib\android\armeabi-v7a\release.\native-lib.cpp.o -Llibs\armeabi-v7a -s -lavutil -llog -lz -shared -fPIC -mthumb -target armv7-none-linux-androideabi -gcc-toolchain E:\Android\sdk\ndk\21.0.6113669\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64 --sysroot=E:\Android\sdk\ndk\21.0.6113669\platforms\android-21/arch-arm -LE:\Android\sdk\ndk\21.0.6113669\sources\cxx-stl\llvm-libc++/libs/armeabi-v7a -lc++_static -lc++abi -lunwind -latomic -nostdlib++ error: E:\Android\sdk\ndk\21.0.6113669\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: avutil: no archive symbol table (run ranlib) clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Task :app:xmakeBuildForArmv7 FAILED

FAILURE: Build failed with an exception.

BUILD FAILED in 6s 4 actionable tasks: 4 executed

waruqi commented 4 years ago

error: avutil: no archive symbol table (run ranlib)

自己看下错误信息,不是很明了么 提供的libavutil.a不对 跟xmake没有关系

它也提示了 尝试用ndk里面的ranlib对libavutil.a更新下符号表 如果还是不行 那就是你的库给的有问

dsp2000 commented 4 years ago

ndk { 'arm64-v8a' } 我使用arm64-v8a,为什么选择了armeabi-v7a来编译?

Task :app:xmakeConfigureForArmv7

xmake f -y -v -p android -a armeabi-v7a --ndk=E:\Android\sdk\ndk\21.0.6113669 --buildir=D:\ktv\TestXmake\app\build\xmake checking for the Android SDK directory ... E:\Android\sdk checking for the Build Tools Version of Android SDK ... 28.0.3 checking for the NDK directory ... E:\Android\sdk\ndk\21.0.6113669 checking for the SDK version of NDK ... 21 checking for the toolchains version of NDK ... 4.9

waruqi commented 4 years ago

请贴下你用的xmake-gradle插件版本 低版本不支持从 ndk.abifilters取,只支持从xmake.abifilters取

        externalNativeBuild {
            xmake {
                // set abi filters (optional), e.g. armeabi, armeabi-v7a, arm64-v8a, x86, x86_64
                // we can also get abiFilters from defaultConfig.ndk.abiFilters
                abiFilters "armeabi-v7a", "arm64-v8a"
            }
dsp2000 commented 4 years ago

plugins { id 'org.tboox.gradle-xmake-plugin' version '1.1.0' }

waruqi commented 4 years ago

那你贴下完整的build.gradle配置,你最上面的截图是abi三个都在的

后来贴的写法也不对,没有abifilters,另外是否放在defaultconfig里面

ndk {
'arm64-v8a'
}
dsp2000 commented 4 years ago

plugins { id 'org.tboox.gradle-xmake-plugin' version '1.1.0' }

apply plugin: 'com.android.application'

android { compileSdkVersion 28

defaultConfig {
    applicationId "com.example.testxmake"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    externalNativeBuild {

// cmake { // cppFlags "" // }

    }
    // 设置支持的SO库架构

// abiFilters 'arm64-v8a' // abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' ndk { 'arm64-v8a' } }

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

externalNativeBuild {
    xmake {
        path "src/main/cpp/xmake.lua"
        logLevel "verbose"
    }

// buildMode "asan" // cmake { // path "src/main/cpp/CMakeLists.txt" // version "3.10.2" // } } }

dsp2000 commented 4 years ago

之前出问题,我以为是v7a的问题。结果发现是v8a的问题

waruqi commented 4 years ago

ndk { 'arm64-v8a' }

看你写的 都没写对,没abiFilters

ndk { abiFilters 'arm64-v8a' }

waruqi commented 4 years ago

这个是xmake-gradle项目的使用问题,请到这里反馈,我迁过来了

dsp2000 commented 4 years ago

ndk { abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' } 编译通过了,谢谢。