關于linux開源庫的編譯過程,特別是在嵌入式系統中使用; 上圖完美詮釋了我本次編譯的環境和運行目標; 下載zlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz。
發現配置libpng-1.6.17出現了錯誤,找不到zlib。 因為libpng開源庫的編譯需要zlib庫的支持; 所以下載了zlib-1.2.8.tar.gz; 編譯zlib庫 zlib編譯的過程比較簡單,./configure不傳入參數,作者的初衷就是為了使zlib的編譯配置過程更為簡單; 這里使用gcc編譯時特別順利,但是使用嵌入式平臺的交叉編譯工具鏈(arm-none-linux-gnueabi-g++)編譯時出現了大量錯誤; 因為zlib-1.2.8.tar.gz使用了部分不完全符合通用的語法,交叉編譯工具無法識別,比如:
/* ========================================================================= */int ZEXPORT deflateInit_(strm, level, version, stream_size) z_streamp strm; int level; const char *version; int stream_size;{ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */}/* ========================================================================= */需要重新更改為:
/* ========================================================================= */int ZEXPORT deflateInit_(//strm, level, version, stream_size) z_streamp strm, int level, const char *version, int stream_size){ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */}/* ========================================================================= */終于還是編譯過了;
admin@ubuntu:~/src/zlib-1.2.8$ export CC=arm-none-linux-gnueabi-c++ admin@ubuntu:~/src/zlib-1.2.8$ ./configureadmin@ubuntu:~/src/zlib-1.2.8$ make cleanadmin@ubuntu:~/src/zlib-1.2.8$ make編譯完成得到libz.a庫。
下面可以編譯libpng-1.6.17而得到libpng.a和libpng.so;
admin@ubuntu:~/src/libpng-1.6.17$ export LDFLAGS="-L/home/admin/src/zlib-1.2.8"admin@ubuntu:~/src/libpng-1.6.17$ export CPPFLAGS="-I/home/admin/src/zlib-1.2.8"admin@ubuntu:~/src/libpng-1.6.17$ ./configure CC=arm-none-linux-gnueabi-g++ --PRefix=$PWD/_install --host=arm-linuxadmin@ubuntu:~/src/libpng-1.6.17$ make && make install–prefix=配置編譯輸出的結果存放的目錄,得到的是:
admin@ubuntu:~/src/libpng-1.6.17$ cd _install/admin@ubuntu:~/src/libpng-1.6.17/_install$ lsbin include lib shareadmin@ubuntu:~/src/libpng-1.6.17/_install$ ls liblibpng16.a libpng16.la libpng16.so libpng16.so.16 libpng16.so.16.17.0 libpng.a libpng.la libpng.so pkgconfigadmin@ubuntu:~/src/libpng-1.6.17/_install$ admin@ubuntu:~/src/libpng-1.6.17/_install$ ls include/libpng16/pngconf.h png.h pnglibconf.h這里中間有個小細節要關注一下,就是libpng庫跟zlib庫有點小小不同的地方,zlib庫編譯的時候直接make命令就可以編譯出libz.a和libz.so到當前目錄,但是如果只使用make命令編譯libpng庫,在當前目錄無法找到libpng.a和libpng.so;還是需要遵循文檔說明使用make和make install命令:
admin@ubuntu:~/src/libpng-1.6.17$ make && make installzlib-1.2.8.tar.gz和libpng-1.6.17.tar.gz 文件下載: http://download.csdn.net/detail/dreamintheworld/9750360 或者直接官網下載: http://www.zlib.net/ http://www.libpng.org/pub/png/libpng.html
新聞熱點
疑難解答