zlib移植

来源:互联网 发布:淘宝客服招聘在家兼职 编辑:程序博客网 时间:2024/05/16 15:02

首先去zlib官网下载zlib 地址:http://www.zlib.net/目前最新版本为1.2.8


打开终端运行

$ tar zxvf zlib-1.2.8.tar.gz

$ cd zlib-1.2.8
$ ./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之前看一下帮助文档

这里我们只要指定一下编译出来的库放在哪就行了

$ ./configure --prefix=/usr/tmp/lib


接着打开Makefile文件修改以下内容

$ gedit Makefile

CC=arm-none-linux-gnueabi-gcc

CFLAGS=-O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
#           -Wstrict-prototypes -Wmissing-prototypes

SFLAGS=-O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
LDFLAGS=
TEST_LDFLAGS=-L. libz.a
LDSHARED=arm-none-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-none-linux-gnueabi-gcc -E

STATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.8
SHAREDLIBM=libz.so.1
LIBS=$(STATICLIB) $(SHAREDLIBV)

AR=arm-none-linux-gnueabi-ar
ARFLAGS=rc
RANLIB=arm-none-linux-gnueabi-ranlib
LDCONFIG=ldconfig
LDSHAREDLIBC=-lc
TAR=tar
SHELL=/bin/sh
EXE=


然后执行

$make

这里我用的交叉编译器是arm-none-linux-gnueabi如果你的交叉编译器是arm-linux就将彩色部分的换成arm-linux

特别注意的是蓝色部分,开始查看网上教程都没有提到这结果编译总是报错

gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o libz.so.1.2.8 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo  -lc
/usr/bin/ld: adler32.lo: Relocations in generic ELF (EM: 40)
adler32.lo: could not read symbols: File in wrong format
collect2: ld 返回 1

make: *** [libz.so.1.2.8] 错误 1

纠结了好长时间发现红色部分执行的是用了gcc编译器导致执行该命令时用了操作系统的/usr/bin/ld的命令而不是交叉编译起里面的ld因此蓝色部分改成arm-none-linux-gnueabi-gcc


最后执行

$sudo make install //这里必须要用管理员身份运行不然会报权限不够的错误

进入/usr/tmp/lib 发现有3个目录分别是 include lib share三个文件夹,到这里zlib就移植成功了!大笑








0 0