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

交叉编译ARM架构libssh时链接libcrypto文件格式不兼容求助

解决交叉编译ARM架构libssh时链接x86 libcrypto的错误

你的判断没错——编译时确实调用了主机x86_64系统默认路径下的libcrypto.so,这个库的架构和你要编译的ARM目标不匹配,导致链接失败。根源在于libssh依赖OpenSSL,但你没有指定交叉编译环境下的ARM版OpenSSL,CMake自动搜索到了主机系统的库。

解决步骤:

  1. 先交叉编译ARM版OpenSSL
    首先需要为你的ARM架构编译对应版本的OpenSSL,作为libssh的依赖:

    • 下载对应版本的OpenSSL源码(建议和libssh要求的版本匹配)
    • 进入源码目录,执行交叉编译配置:
      ./Configure linux-armv7 --prefix=/home/zen/Downloads/armv7-marvell-linux-gnueabi/openssl --cross-compile-prefix=arm-marvell-linux-gnueabi-
      
      注意:linux-armv7需匹配你的ARM架构,若不确定可查看OpenSSL的Configure --help获取对应选项;--prefix指定安装路径,要和你的交叉编译工具链目录保持统一方便管理。
    • 编译并安装:
      make
      make install
      
  2. 修改libssh的CMake配置,指定ARM版OpenSSL路径
    在你原来的CMake命令基础上,添加OpenSSL相关参数,强制CMake使用交叉编译好的ARM版库:

    cmake .. -DCMAKE_BUILD_TYPE=Debug \
    -DCMAKE_INSTALL_PREFIX=/home/zen/Downloads/armv7-marvell-linux-gnueabi \
    -DCMAKE_C_COMPILER=/home/zen/Downloads/armv7-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-gcc \
    -DCMAKE_CXX_COMPILER=/home/zen/Downloads/armv7-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-g++ \
    -DWITH_ZLIB=OFF \
    -DOPENSSL_ROOT_DIR=/home/zen/Downloads/armv7-marvell-linux-gnueabi/openssl \
    -DOPENSSL_INCLUDE_DIR=/home/zen/Downloads/armv7-marvell-linux-gnueabi/openssl/include \
    -DOPENSSL_CRYPTO_LIBRARY=/home/zen/Downloads/armv7-marvell-linux-gnueabi/openssl/lib/libcrypto.so
    

    所有路径需和你安装OpenSSL时的--prefix完全对应。

  3. 清理CMake缓存(必要时)
    如果之前已经运行过CMake配置,先删除build目录下的CMakeCache.txt,或者直接删除整个build目录重新执行上述CMake命令,避免旧缓存干扰新配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:12:31