linux下使用交叉编译工具链编译zlib
zlib交叉编译
zlib下载
zlib介绍网址:https://zlib.net/
官方全版本下载:Index of /fossils
git clone:git clone https://github.com/madler/zlib.git
以下载的zlib-1.3.tar.gz为例:
zlib-1.3.tar.gz
#解压并进入libssh-0.10.6目录
tar -zxvf zlib-1.3.tar.gz
cd zlib-1.3/
编译说明
由于目录下直接有makefile,而且makefile直接include了 Makefile.in 文件,并且在readme中有介绍:
根据大多数 Unix 系统上,按 Makefile.in 顶部的说明操作即可,查看 Makefile.in :
# To compile and test, type:
# ./configure; make test
# Normally configure builds both a static and a shared library.
# If you want to build just a static library, use: ./configure --static
# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
# make install
# To install in $HOME instead of /usr/local, use:
# make install prefix=$HOME
直接执行./configure,然后进行编译make和安装make install。
明显不符合需求,需要进行交叉编译,通过执行./configure -h来查看帮助:
./configure -h
usage:
configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]
[--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]
[--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]
在通过查看configure文件可知:
# To impose specific compiler or flags or install directory, use for example:
# prefix=$HOME CC=cc CFLAGS="-O4" ./configure
# or for csh/tcsh users:
# (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure)
# Incorrect settings of CC or CFLAGS may prevent creating a shared library.
# If you have problems, try without defining CC and CFLAGS before reporting
# an error.
通过设置CC可以指定交叉编译工具链,加上–static可以编译为静态库。
configure配置介绍
根据 ./configure -h 输出的参数,以下是每个配置选项的详细说明:
-
–const
# 启用 const 关键字,提高代码可读性 ./configure --const- 作用:启用 C 语言的
const关键字 - 用途:让代码更严格,防止意外修改常量数据
- 效果:在编译时增加
-Dconst=标志
- 作用:启用 C 语言的
-
–zprefix
# 在所有导出函数前加上 z_ 前缀 ./configure --zprefix- 作用:在所有导出的 API 函数前加上
z_前缀 - 用途:避免与其他库的命名冲突
- 示例:
deflate会变成z_deflate - 使用场景:当系统中已有其他版本的 zlib 时使用
- 作用:在所有导出的 API 函数前加上
-
–prefix=PREFIX
bash
# 指定安装根目录 ./configure --prefix=/usr/local ./configure --prefix=/root/workspace/lib_libary-
作用:指定安装的基础目录
-
默认值:通常是
/usr/local -
安装结构:
PREFIX/include/ # 头文件 PREFIX/lib/ # 库文件 PREFIX/bin/ # 可执行文件 PREFIX/share/ # 文档和数据文件
-
-
–eprefix=EXPREFIX
bash
# 指定架构相关文件的安装位置 ./configure --eprefix=/usr/local/loongarch64- 作用:指定与架构相关的文件安装位置
- 用途:在多架构系统上,区分架构相关和架构无关的文件
- 示例:在交叉编译时很有用
-
–static
# 只构建静态库 ./configure --static- 作用:只构建静态库(.a 文件),不构建共享库(.so 文件)
- 用途:
- 交叉编译时使用
- 需要静态链接的应用程序
- 嵌入式系统开发
- 注意:默认情况下会同时构建静态库和共享库
-
–64
# 启用 64 位模式 ./configure --64- 作用:启用 64 位编译模式
- 用途:
- 在 32 位系统上编译 64 位库
- 确保使用 64 位数据类型
- 注意:在现代 64 位系统上通常不需要
-
–libdir=LIBDIR
bash
# 指定库文件的安装目录 ./configure --libdir=/root/workspace/lib_libary/lib64 ./configure --libdir=/usr/local/lib/loongarch64- 作用:指定库文件(.a 和 .so)的安装目录
- 默认值:
PREFIX/lib - 用途:
- 自定义库文件位置
- 多架构支持(x86_64 和 loongarch64 分离)
-
–sharedlibdir=LIBDIR
# 指定共享库的安装目录 ./configure --sharedlibdir=/usr/local/lib64- 作用:指定共享库(.so)的安装目录
- 默认值:与
--libdir相同 - 用途:
- 单独设置共享库位置
- 遵循某些发行版的目录规范
-
–includedir=INCLUDEDIR
# 指定头文件的安装目录 ./configure --includedir=/root/workspace/lib_libary/include/zlib- 作用:指定 C 头文件的安装目录
- 默认值:
PREFIX/include - 用途:
- 自定义头文件位置
- 避免与系统头文件冲突
-
–archs=“-arch i386 -arch x86_64”
bash
# 指定要构建的架构(主要用于 macOS) ./configure --archs="-arch x86_64 -arch arm64"- 作用:指定要构建的 CPU 架构(主要用于 macOS 的通用二进制)
- 用途:
- 构建支持多个架构的通用二进制
- macOS 上的跨架构编译
- 注意:这个选项主要是为 macOS 设计的
zlib交叉编译
通过上述介绍可以得知,有几种方式可以进行zlib库的交叉编译。
以龙芯交叉编译工具进行说明,Linux平台下编译,编译为静态库,工具链路径:
/opt/loongson-gnu-toolchain-13.2/bin
静态库存放路径:
/root/workspace/lib_libary
那么配置configure时输入以下指令后直接make即可进行编译:
-
使用
./configure方式进行配置#按照configure文件中进行配置 prefix=/root/workspace/lib_libary CC=/opt/loongson-gnu-toolchain-13.2/bin/loongarch64-unknown-linux-gnu-gcc ./configure --static make make install #或者 export PATH=/opt/loongson-gnu-toolchain-13.2/bin:$PATH export CC=loongarch64-unknown-linux-gnu-gcc export AR=loongarch64-unknown-linux-gnu-ar export RANLIB=loongarch64-unknown-linux-gnu-ranlib export STRIP=loongarch64-unknown-linux-gnu-strip ./configure --prefix=/root/workspace/lib_libary --static --libdir=/root/workspace/lib_libary/lib --includedir=/root/workspace/lib_libary/include make make install
-
使用CMake进行交叉编译
指令如下:
#创建build文件夹并进入 mkdir -p build && cd build #执行cmake并传递编译选项 #CMAKE_INSTALL_PREFIX 编译完成后zlib库安装路径 #CMAKE_C_COMPILER 指定 C 编译器的路径 #CMAKE_AR 指定AR路径,用来链接编译出的.o文件为静态库文件 #BUILD_SHARED_LIBS 是否编译动态共享库,OFF表示为否 #CMAKE_SYSTEM_NAME 编译环境系统名 #CMAKE_SYSTEM_PROCESSOR 编译环境系统架构 cmake .. -DCMAKE_INSTALL_PREFIX=/root/workspace/lib_libary -DCMAKE_C_COMPILER=/opt/loongson-gnu-toolchain-13.2/bin/loongarch64-unknown-linux-gnu-gcc -DCMAKE_AR=/opt/loongson-gnu-toolchain-13.2/bin/loongarch64-unknown-linux-gnu-ar -DBUILD_SHARED_LIBS=OFF -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=loongarch64 make make install编译完成后在目录
/root/workspace/lib_libary下会生成如下文件夹:cd /root/workspace/lib_libary/ include/ lib/ share/其中编译好的静态库在lib文件夹下。
清理编译内容:
make clean
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)