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

为Android armeabi-v7a编译BoringSSL后链接libcrypto.so遇格式错误

解决BoringSSL库链接错误:File in wrong format

1. 验证库的架构与目标ABI一致性

先确认编译生成的libcrypto.so确实是armeabi-v7a架构:

# 在终端执行该命令检查库架构
file /path/to/your/libcrypto.so

正常输出应包含ARM, EABI5 version 1 (SYSV)或armv7l相关标识。如果输出是x86/x86_64或arm64说明编译参数未生效,需重新执行BoringSSL编译命令,确保ANDROID_ABI=armeabi-v7a参数正确,且ANDROID_NDK_ROOT指向的NDK版本与Android项目使用的NDK完全一致。

2. 修正项目库路径结构

Android第三方库需按ABI分类存放,正确路径结构应为:

app/opensslSO/libs/
└── armeabi-v7a/
    ├── libcrypto.so
    ├── libssl.so
    ├── libpki.so
    └── libdecrepit.so

同时修改CMakeLists.txt,根据当前编译ABI自动匹配库路径:

cmake_minimum_required(VERSION 3.18.1)

set(OPENSSL_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/opensslSO/include")
# 按当前编译ABI动态获取库路径
set(OPENSSL_LIBRARY_DIR "${CMAKE_SOURCE_DIR}/opensslSO/libs/${ANDROID_ABI}")

include_directories(${OPENSSL_INCLUDE_DIR})

add_library(crypto SHARED IMPORTED)
set_target_properties(crypto PROPERTIES 
    IMPORTED_LOCATION ${OPENSSL_LIBRARY_DIR}/libcrypto.so
    IMPORTED_ABI ${ANDROID_ABI} # 明确指定库ABI,避免混淆
)

add_library(ssl SHARED IMPORTED)
set_target_properties(ssl PROPERTIES 
    IMPORTED_LOCATION ${OPENSSL_LIBRARY_DIR}/libssl.so
    IMPORTED_ABI ${ANDROID_ABI}
)

add_library(pki SHARED IMPORTED)
set_target_properties(pki PROPERTIES 
    IMPORTED_LOCATION ${OPENSSL_LIBRARY_DIR}/libpki.so
    IMPORTED_ABI ${ANDROID_ABI}
)

add_library(decrepit SHARED IMPORTED)
set_target_properties(decrepit PROPERTIES 
    IMPORTED_LOCATION ${OPENSSL_LIBRARY_DIR}/libdecrepit.so
    IMPORTED_ABI ${ANDROID_ABI}
)

# 注意:add_library的目标名需与target_link_libraries的目标名一致
add_library(score_printer SHARED
    my_native_file_path
)

target_link_libraries(score_printer
    crypto
    ssl
    pki
    decrepit
    android
    log
    EGL
    GLESv1_CM
)

3. 配置项目ABI过滤规则

在app模块的build.gradle中明确指定仅编译armeabi-v7a架构,避免编译其他ABI时出现链接错误:

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }
}

4. 确保NDK版本完全兼容

编译BoringSSL使用的NDK版本必须与Android项目依赖的NDK版本完全一致:

  • 查看项目build.gradle中的ndkVersion配置
  • 重新编译BoringSSL时,确保${ANDROID_NDK_ROOT}指向该版本的NDK路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:47:27