交叉编译libpng以及zlib开源库
来源:互联网 发布:汽车修理软件破解版 编辑:程序博客网 时间:2024/06/07 08:01
关于Linux开源库的编译过程,特别是在嵌入式系统中使用;
上图为本次编译的环境和运行目标;
下载zlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz。
admin@ubuntu:~/src$ tar -zxvf libpng-1.6.17.tar.gzadmin@ubuntu:~/src/libpng-1.6.17$ ./configurechecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... /bin/mkdir -pchecking for gawk... no......checking for zlibVersion in -lz... nochecking for z_zlibVersion in -lz... noconfigure: error: zlib not installedadmin@ubuntu:~/src/libpng-1.6.17$
发现配置libpng-1.6.17出现了错误,找不到zlib。
因为libpng开源库的编译需要zlib库的支持;
所以下载了zlib-1.2.8.tar.gz;
编译zlib库
zlib编译的过程比较简单,./configure不允许传入参数;
所以这里通过 $ export CC=arm 进行配置交叉编译工具
$ export CC=arm$ ./configure$ makearm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o adler32.o adler32.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o crc32.o crc32.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o deflate.o deflate.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o infback.o infback.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o inffast.o inffast.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o inflate.o inflate.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o inftrees.o inftrees.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o trees.o trees.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o zutil.o zutil.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o compress.o compress.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o uncompr.o uncompr.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o gzclose.o gzclose.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o gzlib.o gzlib.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o gzread.o gzread.carm-none-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -c -o gzwrite.o gzwrite.c..............$ ls libz.libz.a libz.so libz.so.1 libz.so.1.2.8
编译完成得到libz.a库。
下面可以编译libpng-1.6.17而得到libpng.a和libpng.so;
admin@ubuntu:~/src/libpng-1.6.17$ export LDFLAGS="-L/home/admin/src/zlib-1.2.8"admin@ubuntu:~/src/libpng-1.6.17$ export CPPFLAGS="-I/home/admin/src/zlib-1.2.8"admin@ubuntu:~/src/libpng-1.6.17$ ./configure CC=arm-none-linux-gnueabi-g++ --prefix=$PWD/_install --host=arm-linuxadmin@ubuntu:~/src/libpng-1.6.17$ make && make install // LDFLAGS 和 CPPFLAGS 的含义$ ./configure -helpSome influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir>(指定lib库文件搜索路径) LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir>(指定头文件搜索路径)
编译库的时候configure配置不严谨的一些报错
$ ./configure CC=arm-none-linux-gnueabi-gcc --prefix=$PWD/_install (error: cannot run C compiled programs.)$ ./configure --host=arm-linux --prefix=$PWD/_install (error: C compiler cannot create executables)$ ./configure --host=arm-none-linux-gnueabi-gcc --prefix=$PWD/_install (error: C compiler cannot create executables)$ ./configure --host=arm-linux CC=arm-none-linux --prefix=$PWD/_install(error: C compiler cannot create executables)$ ./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=$PWD/_install (成功)$ ./configure --host=arm-none-linux-gnueabi(成功)$ ./configure --host=arm-none-linux-gnueabi-gcc(checking for arm-none-linux-gnueabi-gcc-gcc)(checking host system type... Invalid configuration `arm-none-linux-gnueabi-gcc': machine `arm-none-linux-gnueabi' not recognized)
交叉编译环境只需要配置 ./configure –host=arm-none-linux-gnueabi
–prefix=配置编译输出的结果存放的目录,得到的是:
admin@ubuntu:~/src/libpng-1.6.17$ cd _install/admin@ubuntu:~/src/libpng-1.6.17/_install$ lsbin include lib shareadmin@ubuntu:~/src/libpng-1.6.17/_install$ ls liblibpng16.a libpng16.la libpng16.so libpng16.so.16 libpng16.so.16.17.0 libpng.a libpng.la libpng.so pkgconfigadmin@ubuntu:~/src/libpng-1.6.17/_install$ admin@ubuntu:~/src/libpng-1.6.17/_install$ ls include/libpng16/pngconf.h png.h pnglibconf.h
这里中间有个小细节要关注一下,就是libpng库跟zlib库有点小小不同的地方:
zlib库编译的时候直接make命令就可以编译出libz.a和libz.so到当前目录(无需prefix配置),而libpng库则需要通过配置prefix安装路径
但是如果只使用make命令编译libpng库,在当前目录无法找到libpng.a和libpng.so;还是需要遵循文档说明使用make和make install命令:
admin@ubuntu:~/src/libpng-1.6.17$ make && make install
zlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz 文件下载:
http://download.csdn.net/detail/dreamintheworld/9750360
或者直接官网下载:
http://www.zlib.net/
http://www.libpng.org/pub/png/libpng.html
补充一点libjpeg开源库的交叉编译:
$ ./configure CC=arm-none-linux-gnueabi-g++ --prefix=$PWD/_install --host=arm-linux$ make && make install
关于libjpeg库的交叉编译,无需像libpng库一样使用export LDFLAGS引入zlib的路径;
关于jpeg库报版本错误的问题
Wrong JPEG library version: library is 80, caller expects 90
可以通过修改Jpeglib.h
#define JPEG_LIB_VERSION 90
改为80即可;
jpeg开源库的下载:
http://www.ijg.org/
- 交叉编译libpng以及zlib开源库
- 交叉编译libpng和zlib
- zlib交叉编译,libpng交叉编译
- Ubuntu下交叉编译zlib,libpng,freetype
- MinGW 编译zlib、libpng
- Windows下 VS2013编译zlib库以及libpng库
- Windows 编译zlib库以及libpng库(下)
- VS 编译libpng和zlib
- 交叉编译libz libpng
- 交叉编译libpng
- 5、交叉编译libpng
- zlib交叉编译过程
- zlib 交叉编译方法
- 1、交叉编译zlib
- zlib x264 交叉编译
- zlib 交叉编译
- zlib交叉编译
- 交叉编译zlib库
- 红帽Linux忘记root密码怎么办
- 弹出层
- eclipse Maven配置
- 单表之一对多&多对一&双向关联
- Android硬件加速原理与实现简介
- 交叉编译libpng以及zlib开源库
- Python自学笔记二、面向对象编程
- 简单字符串比较 (sdut oj)
- Docker -- 系统整洁之道 -- 0
- PAT甲级.1012. The Best Rank (25)
- linux crontab使用和查询
- 机器学习经典算法之KNN及python实现
- leecode 解题总结:38 Count and Say
- iOS真机调试