您的位置:首页 > 其它

Cross Compile libpng

2011-11-27 17:21 387 查看
PNG,是一种图形文件格式,英文名称为Portable Network Graphics,即便携式网络图片。具体的介绍请访问wiki的介绍:PNG

首先从libpng主页下载最新的源码,解压并进入目录。

在配置前先看看配置选项:

./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<lib dir> if you have libraries in a

nonstandard directory <lib dir>

LIBS libraries to pass to the linker, e.g. -l<library>

CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if

you have headers in a nonstandard directory <include dir>

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”文件中的库路径哦),或者可以在安装一次到交叉编译工具链默认的库文件夹,以后编译其他软件时用起来也方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: