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
相关产品推荐
相关产品推荐

