交叉編譯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”