天天看點

交叉編譯libpng報錯:configure: error: zlib not installed

交叉編譯libpng報錯:configure: error: zlib not installed

本次問題的編譯環境(build)是Ubuntu,運作目标(Host)是arm-linux。

看報錯提示,是我沒有安裝zlib庫,是以我從官網把zlib庫下載下傳并安裝了zlib庫後,依然是報錯configure: error: zlib not installed。

zlib的官網位址:http://www.zlib.net/

編譯zlib庫時,./configure不允許傳入–host參數;

這裡通過 $ export CC=arm-linux-gnueabihf-gcc(根據自己的交叉編譯工具鍊修改arm-linux-gnueabihf-gcc) 進行配置交叉編譯工具。

cd zlib-1.2.11
 export CC=arm-linux-gnueabihf-gcc
 ./configure
 make
 make install
           

安裝好zlib庫後,重新進行libpng庫的安裝。

解決方法:

cd libpng-1.6.37
export LDFLAGS="-L/home/admin/src/zlib-1.2.11"
export CPPFLAGS="-I/home/admin/src/zlib-1.2.11"
./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp
make
make install
           

注意:像我者死,學我者生。上面指令要靈活變通地使用,zlib庫的路徑要根據你實際的路徑做出一些修改。

如果你想深究為什麼這樣就能解決問題,可以參考以下資料:

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    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CCAS        assembler compiler command (defaults to CC)
  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
  CPP         C preprocessor
  LT_SYS_LIBRARY_PATH
              User-defined run-time library search path.
  PNG_COPTS   additional flags for the C compiler, use this for options that
              would cause configure itself to fail
           

轉載:http://blog.163.com/huangbao_007/blog/static/356365352008102301434362/

我安裝的路徑不是/usr,是以遇到了一些問題。下面就講一下解決辦法。

先來看幾個相關的環境變量:PATH、LDFLAGS、CFLAGS

PATH:大家應該都很熟悉。安裝一個包後可能會在安裝目錄建立一個bin目錄,裡面都是些可執行程式,為了讓系統能找到這些程式,就需要我們把該路徑加入到PATH環境變量中。下面會講到如何加入。

LDFLAGS:gcc等編譯器會用到的一些優化參數,也可以在裡面指定庫檔案的位置。用法:LDFLAGS=“-L/usr/lib -L/path/to/your/lib”。每安裝一個包都幾乎一定的會在安裝目錄裡建立一個lib目錄。如果你明明安裝了某個包,而安裝另一個包時,它愣是說找不到,那就把那個包的lib路徑加入的LDFALGS中試一下吧。

CFLAGS:和LDFLAGS類似,隻不過要向裡加如的是頭檔案(.h檔案)的路徑,如:CFLAGS=“-I/usr/include -I/path/to/your/include”。同樣地,安裝一個包時會在安裝路徑下建立一個include目錄,當安裝過程中出現問題時,試着把以前安裝的包的include目錄加入到該變量中來。

那如何在那些變量中加入這些路徑呢?以PATH變量為例。

一種方法是:直接在指令行下:

$ PATH="$PATH:/path/to/your/bin:/another/path/to/bin"

$ export PATH

這種方法的好處是友善,立即生效,缺點是把目前會話或shell關了之後就失效了,下次還得運作一遍。

另一種方法是:把下面的兩行内容加入到~/.bashrc檔案中,如果想讓其影響到整個系統而不僅僅是目前使用者,就把下面的内容加入到/etc/bash.bashrc(記得有的系統是/etc/bashrc這個檔案)

PATH="$PATH:/path/to/your/bin:/another/path/to/bin"
export PATH
           

然後,重新啟動shell即可。

需要注意的是,PATH變量的分隔符是:号,其他的是空格,

是以LDFLAGS應該是這樣:

LDFLAGS=“$LDFLAGS -L/path/to/lib -L/path/to/lib”
           

CFLAGS應該是這樣:

CFLAGS=“$CFLAGS -I/path/to/iclude -I/path/to/include”
           

繼續閱讀