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

ARM平台libssh交叉编译问题:BeagleBone Black编译报错

解决BeagleBone Black交叉编译libssh时deflateInit_未定义引用的问题

这个错误本质是链接阶段找不到zlib的压缩函数实现,大概率是你指定的zlib要么是主机(x86)版本,要么CMake没有正确关联到交叉编译的ARM版zlib上。下面是一步步的解决方案:

1. 先交叉编译ARM版的zlib

绝对不能用系统默认的zlib(那是给x86主机用的),必须针对BeagleBone的ARM架构重新编译zlib:

# 下载zlib稳定版(这里用1.2.13为例)
wget https://zlib.net/zlib-1.2.13.tar.gz
tar xzf zlib-1.2.13.tar.gz
cd zlib-1.2.13

# 设置交叉编译工具链环境变量,替换成你实际的ARM GCC路径
export CC=/path/to/arm-linux-gnueabihf-gcc
export AR=/path/to/arm-linux-gnueabihf-ar
export RANLIB=/path/to/arm-linux-gnueabihf-ranlib

# 配置zlib,指定安装到专属的ARM库目录(比如~/arm-zlib)
./configure --prefix=~/arm-zlib --static --shared

# 编译并安装
make && make install

2. 重新配置libssh的CMake,强制关联ARM版zlib

进入libssh源码目录,创建独立的build目录,然后用CMake明确指定交叉编译工具和zlib路径:

cd libssh
mkdir -p build && cd build

# 执行CMake配置,替换成你的实际路径
cmake .. \
    -DCMAKE_C_COMPILER=/path/to/arm-linux-gnueabihf-gcc \
    -DCMAKE_CXX_COMPILER=/path/to/arm-linux-gnueabihf-g++ \
    # 如果有BeagleBone的根文件系统(sysroot),加上这个更稳妥
    -DCMAKE_SYSROOT=/path/to/beaglebone/sysroot \
    # 指定刚才编译的ARM版zlib的头文件和库路径
    -DZLIB_INCLUDE_DIR=~/arm-zlib/include \
    -DZLIB_LIBRARY=~/arm-zlib/lib/libz.so \
    # 指定libssh的安装目录,方便后续拷贝到板子上
    -DCMAKE_INSTALL_PREFIX=~/arm-libssh \
    # 可选:关闭示例和测试编译,加快速度
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTING=OFF

3. 验证CMake配置是否正确

CMake执行完成后,查看输出日志,确认是否出现类似以下内容:

Found ZLIB: /home/your-user/arm-zlib/lib/libz.so (found version "1.2.13")

如果没看到这条,说明CMake没找到zlib,检查路径是否拼写正确,或者尝试添加手动链接参数:
在CMake命令里追加:
-DCMAKE_EXE_LINKER_FLAGS="-L~/arm-zlib/lib -lz"

4. 重新编译libssh

配置没问题后,执行编译:

make -j$(nproc)

如果还是有问题,可以尝试更新libssh到最新稳定版(比如0.10.6),旧版本可能在交叉编译的zlib处理上有bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:15:09