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

Docker容器交叉编译zlib/OpenSSL到armv7遇libz.so格式错误

解决Docker容器中ARM交叉编译zlib与OpenSSL的格式不兼容问题

在Docker Linux容器中交叉编译zlib、OpenSSL时,曾遇到错误:

/usr/local/zlib/lib/libz.so: file not recognized: file format not recognized

执行file /usr/local/zlib/lib/libz.so输出:

/usr/local/zlib/lib/libz.so: symbolic link to libz.so.1.2.13

最初失败的编译脚本

# installing zlib
wget $WGET_URL/zlib-1.2.13.tar.gz -O /tmp/zlib.tar.gz -q && \
mkdir /tmp/zlib && \
tar -xvf /tmp/zlib.tar.gz -C /tmp/zlib && \
rm -rf zlib.tar.gz && \
cd /tmp/zlib/*/ && \
CHOST=arm && \
CC=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc && \
AR=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar && \
RANLIB=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib && \
./configure --prefix=/usr/local/zlib && \
make clean && \
make install &&   \
cd /tmp && \
rm -r -f /tmp/zlib && \
# installing openssl
wget $WGET_URL/openssl-3.0.7.tar.gz -O /tmp/openssl.tar.gz -q && \
mkdir /tmp/openssl && \
tar -xvf /tmp/openssl.tar.gz -C /tmp/openssl && \
rm -rf openssl.tar.gz && \
cd /tmp/openssl/*/ && \
./config linux-generic32 -DL_ENDIAN --prefix=/usr/local/openssl \
--with-zlib-include=/usr/local/zlib/include \
    --with-zlib-lib=/usr/local/zlib/lib shared zlib && \
    make CC=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
LD=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc         \
MAKEDEPPROG=arm-linux-gnueabihf-gcc PROCESSOR=ARM && \
    make install CC=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
    LD=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc     \
MAKEDEPPROG=arm-linux-gnueabihf-gcc PROCESSOR=ARM

成功的编译脚本

# installing zlib
wget $WGET_URL/zlib-1.2.13.tar.gz -O /tmp/zlib.tar.gz -q && \
mkdir /tmp/zlib && \
tar -xvf /tmp/zlib.tar.gz -C /tmp/zlib && \
rm -rf zlib.tar.gz && \
cd /tmp/zlib/*/ && \
CROSS_PREFIX=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf- && \
./configure --prefix=/usr/arm/zlib && \
make clean && \
make && \
make install &&  \
cd /tmp && \
rm -r -f /tmp/zlib && \

# installing openssl
wget $WGET_URL/openssl-1.0.1c.tar.gz -O /tmp/openssl.tar.gz -q && \
mkdir /tmp/openssl && \
tar -xvf /tmp/openssl.tar.gz -C /tmp/openssl && \
rm -rf openssl.tar.gz && \
cd /tmp/openssl/*/ && \
./Configure linux-generic32 shared -DL_ENDIAN --prefix=/usr/arm/openssl \
--openssldir=/usr/arm/openssl && \
make CC=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
RANLIB=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ranlib \
LD=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ld \
MAKEDEPPROG=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc PROCESSOR=ARM && \
make install_sw CC=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
RANLIB=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ranlib  \
LD=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ld \
MAKEDEPPROG=/usr/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc PROCESSOR=ARM && \
cd /tmp && \
rm -r -f /tmp/openssl

关键修改说明

  • zlib编译:通过CROSS_PREFIX指定交叉编译工具链前缀,确保生成ARM架构的库文件,而非主机x86架构
  • OpenSSL配置:改用./Configure而非./config,更适配交叉编译场景;同时调整版本为1.0.1c,避免高版本的兼容性问题
  • 工具链参数:明确指定所有交叉编译工具(CC、RANLIB、LD等)的完整路径,确保编译过程调用正确的ARM工具链
  • 安装方式:OpenSSL使用make install_sw替代默认安装,避免生成不必要的文档或示例组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:31:05