交叉编译libpng以及zlib开源库

交叉编译libpng以及zlib开源库关于Linux开源库的编译过程,特别是在嵌入式系统中使用;上图完美诠释了我本次编译的环境和运行目标;下载zlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz。admin@ubuntu:~/src$tar-zxvflibpng-1.6.17.tar.gzadmin@ubuntu:~/src/libpng-1.6.17$./configurechec

大家好,欢迎来到IT知识分享网。

关于Linux开源库的编译过程,特别是在嵌入式系统中使用;
这里写图片描述
上图为本次编译的环境和运行目标;
下载zlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz。

admin@ubuntu:~/src$ tar -zxvf libpng-1.6.17.tar.gz
admin@ubuntu:~/src/libpng-1.6.17$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
......
checking for zlibVersion in -lz... no
checking for z_zlibVersion in -lz... no
configure: error: zlib not installed
admin@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
$ make
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o adler32.o adler32.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o crc32.o crc32.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o deflate.o deflate.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o infback.o infback.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inffast.o inffast.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inflate.o inflate.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inftrees.o inftrees.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o trees.o trees.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o zutil.o zutil.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o compress.o compress.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o uncompr.o uncompr.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzclose.o gzclose.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzlib.o gzlib.c
arm-none-linux-gnueabi-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzread.o gzread.c
arm-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-linux
admin@ubuntu:~/src/libpng-1.6.17$ make && make install 
// LDFLAGS 和 CPPFLAGS 的含义
$ ./configure -help
Some 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$ ls
bin  include  lib  share
admin@ubuntu:~/src/libpng-1.6.17/_install$ ls lib
libpng16.a  libpng16.la  libpng16.so  libpng16.so.16  libpng16.so.16.17.0  libpng.a  libpng.la  libpng.so  pkgconfig
admin@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-gcc --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/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22794.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信