You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Android编译OpenSSL时出现链接错误与目标架构不匹配问题

Android交叉编译OpenSSL(Conan依赖)链接失败问题

问题场景

执行Conan安装命令时,流程正常启动交叉编译,但OpenSSL构建阶段链接失败:

conan install /.../my_project -pr:h android34-armv8-clang-17-c++_shared -pr:b default --build=missing

目标架构配置文件

android34-armv8-clang-17-c++_shared配置内容如下:

[settings]
os=Android
arch=armv8
compiler=clang
compiler.version=17
compiler.libcxx=c++_shared
build_type=Debug
os.api_level=34
[options]
[build_requires]
[buildenv]
ANDROID_NDK_HOME=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK=$ANDROID_NDK_HOME
ANDROID_NDK_ROOT=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_SDK_ROOT=$ANDROID_HOME
ANDROID_NDK_VERSION=26.3.11579264
CC=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
CXX=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
RANLIB=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
AR=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
[env]
ANDROID_NDK_HOME=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK_ROOT=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK=$ANDROID_NDK_HOME
ANDROID_SDK_ROOT=$ANDROID_HOME
ANDROID_NDK_VERSION=26.3.11579264
CC=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
CXX=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
RANLIB=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
AR=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
[conf]                                                                                                                       
tools.android:ndk_path=/home/user/Android/Sdk/ndk/26.3.11579264/

构建流程日志

Conan正确识别交叉编译目标(Cross-build from 'Linux:x86_64' to 'Android:armv8'),OpenSSL配置阶段日志如下:

openssl/3.2.1: using target: conan-Debug-Android-armv8-clang-17 -> linux-generic64
openssl/3.2.1: my %targets = (
    "conan-Debug-Android-armv8-clang-17" => {
        inherit_from => [ "linux-generic64" ],
        cflags => add("-g"),
        cxxflags => add("-g"),
        
        lflags => add(""),
        
        
        
        perlasm_scheme => "linux64",
    },
);

openssl/3.2.1: Aggregating env generators
openssl/3.2.1: Calling build()
openssl/3.2.1: apply_conandata_patches(): No patches defined in conandata
openssl/3.2.1: Running: perl ./Configure "conan-Debug-Android-armv8-clang-17" shared --prefix=/ --libdir=lib --openssldir="/home/user/.conan/data/openssl/3.2.1/_/_/package/307503e24fa1e7276c553bf27b1fc9befa5ee61a/res" no-unit-test threads PERL=perl no-tests --debug  -D__ANDROID_API__=34 -fPIC enable-fips no-md2 zlib --with-zlib-include="/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/include" --with-zlib-lib="/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib"
Configuring OpenSSL version 3.2.1 for target conan-Debug-Android-armv8-clang-17
Using os-specific seed configuration
...
OpenSSL has been successfully configured       
...

链接错误信息

配置成功后,构建阶段出现架构不兼容错误:

/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -fPIC -pthread -g -g -fPIC -Wl,-z,defs -Wl,-znodelete -shared -Wl,-Bsymbolic -L/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib  \
    -o providers/fips.so -Wl,--version-script=providers/fips.ld \
    providers/fips/fips-dso-fips_entry.o \
    providers/libfips.a -lz -ldl -pthread 
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(adler32.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(compress.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(crc32.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(deflate.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(gzclose.c.o) is incompatible with elf64-x86-64
...
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:25460: providers/fips.so] Error 1
make[1]: *** Waiting for unfinished jobs....
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:26026: util/quicserver] Error 1
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:5727: libcrypto.so.3] Error 1
make[1]: Leaving directory '/home/user/.conan/data/openssl/3.2.1/_/_/build/307503e24fa1e7276c553bf27b1fc9befa5ee61a/src'
make: *** [Makefile:3232: build_sw] Error 2

问题分析

  • 核心矛盾:依赖zlib是为armv8架构编译的(符合Android目标设备),但OpenSSL构建流程尝试将其作为x86架构库进行链接,导致不兼容错误。
  • 已遵循OpenSSL官方文档(NOTES_ANDROID.md、INSTALL.md、15-android.conf)设置ANDROID_NDK_ROOT等环境变量,且确认-D__ANDROID_API__已设置为正确的目标API 34。
  • 怀疑问题根源在于Conan自动生成的OpenSSL目标conan-Debug-Android-armv8-clang-17,OpenSSL的conanfile中明确标注“Android targets are very broken”。

补充说明

该问题已提交至Conan相关代码仓库的Issue跟踪。


内容的提问来源于stack exchange,提问作者simonsays

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:10:55