Cross Compile libpng
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”文件中的庫路徑哦),或者可以在安裝一次到交叉編譯工具鏈默認的庫文件夾,以後編譯其他軟件時用起來也方便。
首先從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”文件中的庫路徑哦),或者可以在安裝一次到交叉編譯工具鏈默認的庫文件夾,以後編譯其他軟件時用起來也方便。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.