Le *_*det 7 android openssl android-ndk flutter
我正在开发一个使用 Flutter 和 Rust 的项目,并且我正在尝试为 Android 构建它。arm-linux-androideabi-ranlib
但是,我遇到了与未找到相关的错误。这是我收到的错误消息:
--- stderr\n/home/user/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar: warning: creating libcrypto.a\n/bin/sh: 1: arm-linux-androideabi-ranlib: not found\n/home/user/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar: warning: creating libssl.a\n/bin/sh: 1: arm-linux-androideabi-ranlib: not found\n/bin/sh: 5: arm-linux-androideabi-ranlib: not found\nmake: *** [Makefile:313: install_dev] Error 127\nthread \'main\' panicked at \'\n\n\nError installing OpenSSL:\n Command: cd "/home/user/IdeaProjects/my_project/rust/target/armv7-linux-androideabi/debug/build/openssl-sys-c3d36b893b4843b2/out/openssl-build/build/src" && "make" "install_dev"\n Exit status: exit status: 2\n
Run Code Online (Sandbox Code Playgroud)\n我检查了 NDK 目录,似乎存在所需的工具,但不完全是文件arm-linux-androideabi-ranlib
。这是工具链目录的 ls 输出:
prebuilt/linux-x86_64/bin via v2.7.18 took 6s \n\xe2\x9d\xaf pwd\n/home/user/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bi\nprebuilt/linux-x86_64/bin via v2.7.18 \n\xe2\x9d\xaf ls\naarch64-linux-android21-clang i686-linux-android29-clang++\naarch64-linux-android21-clang++ i686-linux-android30-clang\naarch64-linux-android22-clang i686-linux-android30-clang++\naarch64-linux-android22-clang++ i686-linux-android31-clang\naarch64-linux-android23-clang i686-linux-android31-clang++\naarch64-linux-android23-clang++ i686-linux-android32-clang\naarch64-linux-android24-clang i686-linux-android32-clang++\naarch64-linux-android24-clang++ i686-linux-android33-clang\naarch64-linux-android26-clang i686-linux-android33-clang++\naarch64-linux-android26-clang++ ld\naarch64-linux-android27-clang ld64.lld\naarch64-linux-android27-clang++ ld.lld\naarch64-linux-android28-clang lld\naarch64-linux-android28-clang++ lldb\naarch64-linux-android29-clang lldb-argdumper\naarch64-linux-android29-clang++ lldb.sh\naarch64-linux-android30-clang lld-link\naarch64-linux-android30-clang++ llvm-addr2line\naarch64-linux-android31-clang llvm-ar\naarch64-linux-android31-clang++ llvm-as\naarch64-linux-android32-clang llvm-bolt\naarch64-linux-android32-clang++ llvm-cfi-verify\naarch64-linux-android33-clang llvm-config\naarch64-linux-android33-clang++ llvm-cov\narmv7a-linux-androideabi19-clang llvm-cxxfilt\narmv7a-linux-androideabi19-clang++ llvm-dis\narmv7a-linux-androideabi21-clang llvm-dwarfdump\narmv7a-linux-androideabi21-clang++ llvm-dwp\narmv7a-linux-androideabi22-clang llvm-lib\narmv7a-linux-androideabi22-clang++ llvm-link\narmv7a-linux-androideabi23-clang llvm-lipo\narmv7a-linux-androideabi23-clang++ llvm-modextract\narmv7a-linux-androideabi24-clang llvm-nm\narmv7a-linux-androideabi24-clang++ llvm-objcopy\narmv7a-linux-androideabi26-clang llvm-objdump\narmv7a-linux-androideabi26-clang++ llvm-profdata\narmv7a-linux-androideabi27-clang llvm-ranlib\narmv7a-linux-androideabi27-clang++ llvm-rc\narmv7a-linux-androideabi28-clang llvm-readelf\narmv7a-linux-androideabi28-clang++ llvm-readobj\narmv7a-linux-androideabi29-clang llvm-size\narmv7a-linux-androideabi29-clang++ llvm-strings\narmv7a-linux-androideabi30-clang llvm-strip\narmv7a-linux-androideabi30-clang++ llvm-symbolizer\narmv7a-linux-androideabi31-clang llvm-windres\narmv7a-linux-androideabi31-clang++ merge-fdata\narmv7a-linux-androideabi32-clang remote_toolchain_inputs\narmv7a-linux-androideabi32-clang++ sancov\narmv7a-linux-androideabi33-clang sanstats\narmv7a-linux-androideabi33-clang++ scan-build\nbisect_driver.py scan-view\nclang x86_64-linux-android21-clang\nclang++ x86_64-linux-android21-clang++\nclang-14 x86_64-linux-android22-clang\nclang-check x86_64-linux-android22-clang++\nclangd x86_64-linux-android23-clang\nclang-format x86_64-linux-android23-clang++\nclang-tidy x86_64-linux-android24-clang\ndsymutil x86_64-linux-android24-clang++\ngit-clang-format x86_64-linux-android26-clang\ni686-linux-android19-clang x86_64-linux-android26-clang++\ni686-linux-android19-clang++ x86_64-linux-android27-clang\ni686-linux-android21-clang x86_64-linux-android27-clang++\ni686-linux-android21-clang++ x86_64-linux-android28-clang\ni686-linux-android22-clang x86_64-linux-android28-clang++\ni686-linux-android22-clang++ x86_64-linux-android29-clang\ni686-linux-android23-clang x86_64-linux-android29-clang++\ni686-linux-android23-clang++ x86_64-linux-android30-clang\ni686-linux-android24-clang x86_64-linux-android30-clang++\ni686-linux-android24-clang++ x86_64-linux-android31-clang\ni686-linux-android26-clang x86_64-linux-android31-clang++\ni686-linux-android26-clang++ x86_64-linux-android32-clang\ni686-linux-android27-clang x86_64-linux-android32-clang++\ni686-linux-android27-clang++ x86_64-linux-android33-clang\ni686-linux-android28-clang x86_64-linux-android33-clang++\ni686-linux-android28-clang++ yasm\ni686-linux-android29-clang\n
Run Code Online (Sandbox Code Playgroud)\n我正在使用 Flutter 3.7.6、Dart 2.19.3 和 Cargo-ndk。我的 gradle.properties 文件将 ANDROID_NDK 变量设置为正确的路径:
\nANDROID_NDK=/home/user/Android/Sdk/ndk/25.2.9519653/\n
Run Code Online (Sandbox Code Playgroud)\n在我的 中build.gradle
,我有以下构建 Rust 项目的任务:
[\n new Tuple2(\'Debug\', \'\'),\n new Tuple2(\'Profile\', \'--release\'),\n new Tuple2(\'Release\', \'--release\')\n].each {\n def taskPostfix = it.first\n def profileMode = it.second\n tasks.whenTaskAdded { task ->\n if (task.name == "javaPreCompile$taskPostfix") {\n task.dependsOn "cargoBuild$taskPostfix"\n }\n }\n tasks.register("cargoBuild$taskPostfix", Exec) {\n commandLine \'sh\', \'-c\', """cd ../../rust/my_lib && \\\n ANDROID_NDK_HOME="$ANDROID_NDK" cargo ndk \\\n -t armeabi-v7a -t arm64-v8a -t x86 -t x86_64 \\\n -o ../android/app/src/main/jniLibs build $profileMode"""\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n我在我的项目中使用flutter_rust_bridge 版本 1.67.0。与此处build.gradle
文件相关的文档。
铁锈Cargo.toml
:
[\n new Tuple2(\'Debug\', \'\'),\n new Tuple2(\'Profile\', \'--release\'),\n new Tuple2(\'Release\', \'--release\')\n].each {\n def taskPostfix = it.first\n def profileMode = it.second\n tasks.whenTaskAdded { task ->\n if (task.name == "javaPreCompile$taskPostfix") {\n task.dependsOn "cargoBuild$taskPostfix"\n }\n }\n tasks.register("cargoBuild$taskPostfix", Exec) {\n commandLine \'sh\', \'-c\', """cd ../../rust/my_lib && \\\n ANDROID_NDK_HOME="$ANDROID_NDK" cargo ndk \\\n -t armeabi-v7a -t arm64-v8a -t x86 -t x86_64 \\\n -o ../android/app/src/main/jniLibs build $profileMode"""\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n有谁知道为什么构建失败并出现“arm-linux-androideabi-ranlib not found”错误以及如何修复它?任何帮助,将不胜感激。谢谢!
\n小智 0
CC_aarch64-linux-android
您可以通过、等环境变量配置 OpenSSL Android 构建脚本使用的命令路径RANLIB_aarch64-linux-android
。这是我用来配置此类变量的 PowerShell 脚本:
$ANDROID_HOME = "/path/to/Android/sdk";
$ANDROID_SUBDIRS = "emulator", "tools", "tools/bin", "platform-tools";
ForEach ($subdir in $ANDROID_SUBDIRS) {
${env:PATH} = "${env:PATH}:${ANDROID_HOME}/$subdir";
}
${env:ANDROID_HOME} = $ANDROID_HOME;
${env:ANDROID_SDK_ROOT} = $ANDROID_HOME;
${env:ANDROID_NDK_ROOT} = "$ANDROID_HOME/ndk/25.2.9519653";
function configureAndroidToolchain {
# "windows-x86_64" on Windows
# "darwin-x86_64" on macOS (even with Apple Silicon)
# "linux-x86_64" on Linux
$hostTag = "darwin-x86_64";
# Use the minSdkVersion you use
$sdkVersion = "29";
$archs = @{}
$archs["aarch64-linux-android"] = $null;
$archs["armv7-linux-androideabi"] = "armv7a-linux-androideabi";
$archs["x86_64-linux-android"] = $null;
$archs["i686-linux-android"] = $null;
$prebuiltDir = "${env:ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/$hostTag/bin";
foreach ($rustArch in $archs.Keys) {
$androidArch = $archs[$rustArch];
if ($androidArch -eq $null) {
$androidArch = $rustArch;
}
Set-Item "env:CC_$rustArch" -Value "$prebuiltDir/$androidArch$sdkVersion-clang";
Set-Item "env:CXX_$rustArch" -Value "$prebuiltDir/$androidArch$sdkVersion-clang++";
Set-Item "env:AR_$rustArch" -Value "$prebuiltDir/llvm-ar";
Set-Item "env:RANLIB_$rustArch" -Value "$prebuiltDir/llvm-ranlib";
Set-Item "env:CFLAGS_$rustArch" -Value "-D__ANDROID_MIN_SDK_VERSION__=$sdkVersion";
Set-Item "env:CXXFLAGS_$rustArch" -Value "-D__ANDROID_MIN_SDK_VERSION__=$sdkVersion";
}
}
configureAndroidToolchain;
Run Code Online (Sandbox Code Playgroud)
应用这些变量后,OpenSSL 构建将正常完成。
归档时间: |
|
查看次数: |
1036 次 |
最近记录: |