PNG,是一种图形文件格式,英文名称为Portable Network Graphics,即便携式网络图片。具体的介绍请访问wiki的介绍:
首先从下载最新的源码,解压并进入目录。
在配置前先看看配置选项:
./configure --help
选项太多,只介绍一些要用的:
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
这两个选项太熟了,安装位置的配置。
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
......
一大堆安装目录设置选项,一般默认就好,不用设置。
Program names:
是设置安装的文件名称,默认就好。
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
这两个选项在交叉编译时还是配置一下比较好。
Optional Features:这里比较重要,是编译时用的一些配置选项,比较重要的是以下两个,但是默认是打开的,所以也不用配置。
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
Optional Packages:里面是一些与别的包编译配置的选项,此次不使用。
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L
if you have libraries in a
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if
you have headers in a nonstandard directory
CPP C preprocessor
以上的选现地球人都知道的编译选项,如果依赖的包的位置不在默认的位置的话,那你就必须设置其中的一些了。
如果是交叉编译,那就必须设置CC了。
还有,libpng依赖zlib,所以你必须先编译好zlib,并放在编译器找得到地方,或是在设置时加上CFLAGS="-I******" 和 LDFLAGS="-L*******"。
这里有我交叉编译的记录:Cross Compile zlib
这次我将zlib库文件放在了交叉编译工具链默认的库文件夹里了,所以不用设置了,以后用起来也方便。
我的配置是:
CC=arm-9tdmi-linux-gnu-gcc ./configure --prefix=$PREFIX --host=arm-9tdmi-linux-gnu
然后就是make;make install。
之后会在$PREFIX下出现一下结构:
|-- bin
| |-- libpng-config -> libpng12-config
| `-- libpng12-config
|-- include
| |-- libpng12
| | |-- png.h
| | `-- pngconf.h
| |-- png.h -> libpng12/png.h
| `-- pngconf.h -> libpng12/pngconf.h
|-- lib
| |-- libpng.a -> libpng12.a
| |-- libpng.la -> libpng12.la
| |-- libpng.so -> libpng12.so
| |-- libpng.so.3 -> libpng.so.3.35.0
| |-- libpng.so.3.35.0
| |-- libpng12.a
| |-- libpng12.la
| |-- libpng12.so -> libpng12.so.0.35.0
| |-- libpng12.so.0 -> libpng12.so.0.35.0
| |-- libpng12.so.0.35.0
| `-- pkgconfig
| |-- libpng.pc -> libpng12.pc
| `-- libpng12.pc
`-- share
`-- man
|-- man3
| |-- libpng.3
| `-- libpngpf.3
`-- man5
`-- png.5
其中真正需要拷贝到开发板上的是lib中的共享库文件,其他的文件在软件开发时才用得着。以下一一介绍:
libpng12-config:是一个获得库文件存放位置和库信息的脚本,里面存放的是和你刚刚配置的$PREFIX有关的位置。
include 中的是编译其他依赖libpng的软件时提供的头文件
pkgconfig 文件夹中的.pc文件也是提供库文件存放位置和库信息的文件,是给pkg-config工具准备的,编译软件时使用的。
对于.pc文件和pkg-config工具的介绍,请看:
关于pkg-config和libtool的相关知识链接
我交叉编译完都会将头文件、库文件、“.pc”文件和“.la”文件放在交叉编译工具链默认的库文件夹里(记得修改“.pc”文件和“.la”文件中的库路径哦),或者可以在安装一次到交叉编译工具链默认的库文件夹,以后编译其他软件时用起来也方便。
阅读(5979) | 评论(0) | 转发(3) |