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