『壹』 交叉編譯opencv 自動生成zlib嗎
第一步,安裝交叉編譯工具arm-linux-gcc-4.3.2
xgy@ubuntu:~/toolchain$mkdir arm
xgy@ubuntu:~/toolchain$cd arm
xgy@ubuntu:~/toolchain/arm$tar xvf arm-linux-gcc-4.3.2
解壓後,在當目錄下會多一個usr目錄,由於我不喜歡這目錄太深,然後就執行如下命令:
xgy@ubuntu:~/toolchain/arm$cp -rv usr/local/* .
xgy@ubuntu:~/toolchain/arm$rm -rf usr
接下來設置環境變數PATH,執行命令如下:
xgy@ubuntu:~/toolchain/arm$cd
xgy@ubuntu:~$vi .bashrc
在.bashrc文件的最後加入:exportPATH=$PATH:/home/xgy/toolchain/arm/4.3.2/bin 保存退出(:wq)
xgy@ubuntu:~$source .bashrc //使剛設置的值生效
到此本來交叉編譯工具就已經安裝成功了的,可經過檢查卻發現下圖中左列的arm-linux-g++,arm-linux-gcc是4.3.3版本的(用命令arm-linux-gcc -v 查看),而其它的確是版本的,4.3.2這是一個奇怪現象!
因為我曾試過用4.3.3版本的g++交叉編譯opencv2.0總是出錯如下:
在這里,我只好創建軟鏈接,使它指向右側的arm-none-linux-gnueabi-g++,arm-none-linux-gnueabi-gcc。在創建之前先對原來的兩個文件做備份。執行命令如下:
在這里再次檢查下arm-linux-gcc及arm-linux-g++的版本
命令arm-linux-gcc –v 輸出的最後一行是應該是:gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)在這里說明下,這個很重要:現在所用的arm-linux-gcc實際上使用的是~./toolchain/arm/4.3.2/bin/目錄下的arm-none-linux-gnueabi-gcc,而它的include為arm/4.3.2/arm-none-linux-gnueabi/include,對應的lib為arm/4.3.2/arm-none-linux-gnueabi/lib,也就是說,你如果用arm-linux-gcc編譯程譯的話,對頭文件它預設的就找arm/4.3.2/arm-none-linux-gnueabi/include,對庫它預設的就找 arm/4.3.2/arm-none-linux-gnueabi/lib,而不是/usr/include /usr/lib,所以如果你要加什麼.h .a .so文件的話,記著一定要把這些文件加到這兩個目錄下去,不然這個交叉編譯器會告你找不到所要的庫或頭文件。這里的原理對於其它交叉編譯器也適應(主要指目錄結構),只是可能目錄名不一樣。
OK,到此,交編譯器安裝成功!
2012-11-2 今天換了一個4.3.2版本的arm-linux-gcc沒有發現上面的問題,也許是我以前在復制的時候出錯了,用cp命令時最好使用-a選項。
由於opencv2.0依懶於zlib,png、jpeg圖形庫而我們的arm-linux-gcc 是不帶這些庫的,它只帶了一些基本的庫,所以這里我們首先就要交叉編譯這些文件,安裝到arm/4.3.2/arm-none-linux-gnueabi/include,arm/4.3.2/arm-none-linux-gnueabi/lib目錄中。庫不一定要最新的,庫的版本太新了,opencv有可能不認識。
首先安裝zlib庫,這個是後面兩個庫的編譯基礎。
xgy@ubuntu:~/tmp$ tar zxvf zlib-1.2.3.tar.gz
在當前目錄下會多一個zlib-1.2.3的目錄。
由於 zlib 庫的configure 腳本不支持交叉編譯選項,只好自己手動臨時把 gcc 修改成指向我們的交叉編譯器 arm-linux-gcc 。執行如下命令:
xgy@ubuntu:~/tmp$ cd /usr/bin
xgy@ubuntu:/usr/bin$ sudo –i //這里得切換到root用戶下才能有許可權做下面的操作。
[sudo] password for xgy: //在這里輸入xgy用戶的密碼
root@ubuntu:~# cd /usr/bin
root@ubuntu:/usr/bin# mv gcc gcc_back
root@ubuntu:/usr/bin# mv ld ld_back
root@ubuntu:/usr/bin# ln -sv/home/xgy/toolchain/arm/4.3.2/bin/arm-linux-gcc ./gcc
root@ubuntu:/usr/bin# ln -sv/home/xgy/toolchain/arm/4.3.2/bin/arm-linux-ld ./ld
下面檢查下是否換過來了
root@ubuntu:/usr/bin#gcc –v
gcc version4.3.2 (Sourcery G++ Lite 2008q3-72) //為輸出的最後一行
root@ubuntu:/usr/bin#ld -v
GNU ld (SourceryG++ Lite 2008q3-72) 2.18.50.20080215
接著切換到原來的目錄~/tmp/zlib-1.2.3執行如下命令
root@ubuntu:/usr/bin#su – xgy //注意這里和用命令 suxgy是有區別的,-表示用xgy的環境
xgy@ubuntu:~$ cdtmp/zlib-1.2.3/
xgy@ubuntu:~/tmp/zlib-1.2.3$./configure --prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/--shared
xgy@ubuntu:~/tmp/zlib-1.2.3$make (如果以前在這個目錄下執行過make ,那要先執行makeclean 然後執行make)
xgy@ubuntu:~/tmp/zlib-1.2.3$make install
然後可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include,lib}目錄下是否多了一些文件(可以另外再開一個終端查看,這樣方便點),如下圖:
在這里記著把剛才改過的gcc再改回去,不然後面會出錯!!!
接下來安裝png庫,這個是用來顯示png圖形的。
xgy@ubuntu:~/tmp$tar jxvf libpng-1.2.18.tar.bz2
xgy@ubuntu:~/tmp$cd libpng-1.2.18/
由於libpng不提供有效的configure腳本(可以查看INSTALL文件),所以只好自己動手改Makefile文件了。
xgy@ubuntu:~/tmp/libpng-1.2.18$cp scripts/makefile.linux Makefile
xgy@ubuntu:~/tmp/libpng-1.2.18$vi Makefile
CC=arm-linux-gcc //修改這里
MKDIR_P=mkdir -p
# where "make install" putslibpng12.a, libpng12.so*,
# libpng12/png.h and libpng12/pngconf.h
# Prefix must be a full pathname.
prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi
exec_prefix=$(prefix)
# Where the zlib library and include filesare located.
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/home/xgy/toolchain/arm/4.3.2/arm/arm-none-linux-gnueabi/lib //修改這里
ZLIBINC=/home/xgy/toolchain/arm/4.3.2/arm/arm-none-linux-gnueabi/include//修改這里
保存退出後執行如下命令:
xgy@ubuntu:~/tmp/libpng-1.2.18$ make
xgy@ubuntu:~/tmp/libpng-1.2.18$ makeinstall
然後可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include,lib}目錄下是否多了一些文件(可以另外再開一個終端查看,這樣方便點),如下圖:
如果有錯,檢查下前面的步聚,特別是看zlib有安裝有沒有出錯。
接下來安裝jpeg庫
xgy@ubuntu:~/tmp/libpng-1.2.18$ cd ..
xgy@ubuntu:~/tmp$tar zxvf jpegsrc.v6b.tar.gz
xgy@ubuntu:~/tmp/jpeg-6b$
xgy@ubuntu:~/tmp/jpeg-6b$ ./configure --prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/--host=arm-linux --enable-shared
按此命令進行,然後修 改makefile文件將CC的值改為arm-linux-gcc,一定得改!!
xgy@ubuntu:~/tmp/jpeg-6b$make
安裝前需要在 arm-linux 下建個目錄,不然安裝會出錯
xgy@ubuntu:~/tmp/jpeg-6b$mkdir -pv /home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/man/man1
mkdir: created directory `/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/man/man1
xgy@ubuntu:~/tmp/jpeg-6b$ make install
然後可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include, lib}目錄下是否多了一些文件(可以另外再開一個終端查看,這樣方便點),如下圖:
到此,三個庫安裝完畢!
『貳』 Zlib 編譯不過! 請求幫助
看樣子是沒有連接上zlibwapi.lib這個庫。
include zlib.h或者zlibwapi.h之前加上一段
#pragma comment(lib , "zlibwapi.lib的路徑")
或者在工程的propertis->link->input->additional dependencies裡面加上zlibwapi.lib的路徑。
zlib.lib是win32下的。zlibwapi.lib是x64的庫。
『叄』 交叉編譯zlib出錯
$ export CC=mipsel-linux-gcc
$ ./configure --prefix=/opt --shared
$ make CC=mipsel-linux-gcc
$ make install
ps:此處的環境CC=mipsel-linux-gcc 記得換回來!
『肆』 linux用rpm方式安裝zlib庫和GD庫 跟用編譯方式安裝zlib庫和gd庫有什麼區別
rpm方式是你只要安裝了就一直在,並且裝到了內核中,編譯方式安裝是從你編譯開始鏈接的,相當於是鏈接的動態庫,是鏈接到編譯器的
『伍』 如何編譯和使用zlib-Windows
如何編譯Zlib
1、輸入./configure
提示錯誤「please use win32/makefile.gcc instead」
2、cp win32/makefile.gcc Makefile.gcc
3、make -f Makefile.gcc
編譯成功
4、在Makefile.gcc 文件中已經給我們定義了「INCLUDE_PATH」和「INCLUDE_PATH」變數,現在我明定義一下「INCLUDE_PATH」和「INCLUDE_PATH」變數的實際路徑
執行
export INCLUDE_PATH=D:/GNU/MSYS/utils/zlib/include
export LIBRARY_PATH=D:/GNU/MSYS/utils/zlib/lib
export BINARY_PATH=D:/GNU/MSYS/utils/zlib/bin
make install -f Makefile.gcc
cp zlib1.dll D:/GNU/MSYS/utils/zlib/bin
上面的的方法中其實只用到了「INCLUDE_PATH」和「INCLUDE_PATH」變數,只有在SHARED_MODE=1的情況下,Makefile.gcc會自動將zlib1.dll拷貝到D:/GNU/MSYS/utils/zlib/bin目錄
簡單的方法,使用SHARED_MODE=1安裝
1、編譯
make -fwin32/Makefile.gcc
2、設置變數
export INCLUDE_PATH=D:/GNU/MSYS/utils/zlib/include
export LIBRARY_PATH=D:/GNU/MSYS/utils/zlib/lib
export BINARY_PATH=D:/GNU/MSYS/utils/zlib/bin
3、安裝
make install -fwin32/Makefile.gcc SHARED_MODE=1
4、編譯
gcc zlib_test.c -I /zlib/include -L /zlib/lib libz.a -o zlib_test
5、如果將zlib 的lib和include復制到MinGW,則
gcc zlib_test.c -S -lz
注意到,我們用-lz加入了zlib庫
-S 表示生成匯編
6、使用makefile
zlib_test:zlib_test.c
gcc -o zlib_test zlib_test.c -lz
clean:
rm -rf *.o zlib_test
7、使用makefile分布生成
all: zlib_test.exe
@echo "ALL"
zlib_test.exe: zlib_test.o
gcc zlib_test.o -lz -o zlib_test
zlib_test.o: zlib_test.s
gcc -c zlib_test.s -o zlib_test.o
zlib_test.s: zlib_test.i
gcc -S zlib_test.i -o zlib_test.s
zlib_test.i: zlib_test.c
gcc -E zlib_test.c -o zlib_test.i
clean:
rm -rf *.s *.i *.o *.exe zlib_test
在命令行輸入 make all,make zlib_test.exe 或者 make clean
『陸』 編譯安裝openssl時使用參數zlib-dynamic和zlib有什麼區別
./config shared zlib./config shared zlib-dynamic
一個是靜態鏈接,一個是動態庫,windows下為dll,linux為啥來著我也忘了。
這個參數的意思是,openssl應該使用哪個方式來獲取zlib依賴。如果你全局安裝了zlib-devel,那麼選擇zlib-dynamic即可。
如果你選擇zlib,可能需要配置zlib-src,也就是zlib的源碼讓openssl可以將其靜態編譯到自己體內。
『柒』 linux怎麼安裝zlib系統配置
在linux命令行上查詢一下zlib的軟體地址,然後使用瀏覽器打開即可,如下圖所示
大家也可以在網路上進行搜索,不過一定要注意安全哦,避免下載到一些不幹凈的軟體,所以這點需要注意一下
【參考資料後面附官網下載地址】
END
Gcc編譯安裝zlib源碼包並配置使用
使用tar 命令進行解壓出來,然後進入到安裝目錄,如下圖所示
tar zxf zlib-1.2.8.tar.gz
cd zlib-1.2.8
使用./configure --help可以查看編譯的選項,我們這里使用簡單的選項安裝即可
進入安裝文件目錄,然後 使用如下命令進行安裝
./configure --prefix=/data/progam/zlib
make
make install
如下圖所示
再進行配置一下系統的文件,載入剛才編譯安裝的zlib生成的庫文件
vi /etc/ld.so.conf.d/zlib.conf
加入如下內容後保存退出
/data/program/zlib/lib
==============================
也就是添加安裝目錄的文件路徑,庫文件。ldconfig 運行之後就會載入安裝的庫文件了。
『捌』 如何在linux平台上編譯安裝zlib軟體
搜索並下載zlib源碼包
1
在linux命令行上查詢一下zlib的軟體地址,然後使用瀏覽器打開即可,如下圖所示
大家也可以在網路上進行搜索,不過一定要注意安全哦,避免下載到一些不幹凈的軟體,所以這點需要注意一下
【參考資料後面附官網下載地址】
END
Gcc編譯安裝zlib源碼包並配置使用
使用tar 命令進行解壓出來,然後進入到安裝目錄,如下圖所示
tar zxf zlib-1.2.8.tar.gz
cd zlib-1.2.8
使用./configure --help可以查看編譯的選項,我們這里使用簡單的選項安裝即可
進入安裝文件目錄,然後 使用如下命令進行安裝
./configure --prefix=/data/progam/zlib
make
make install
如下圖所示
再進行配置一下系統的文件,載入剛才編譯安裝的zlib生成的庫文件
vi /etc/ld.so.conf.d/zlib.conf
加入如下內容後保存退出
/data/program/zlib/lib
==============================
也就是添加安裝目錄的文件路徑,庫文件。ldconfig 運行之後就會載入安裝的庫文件了。
『玖』 新手求教,如何將從ZLIB官網下下來的源代碼編譯成zlib.dll
詳細步驟如下:
1. 安裝zlib-1.2.3.exe和zlib-1.2.3-src.exe。
2. 打開VS2008,在選項的VC++目錄中,添加庫目錄\GnuWin32\lib。添加包含文件目錄\GnuWin32\include。
3. 新建一個Win32項目,類型選DLL,點上空項目。
4. 將\GnuWin32\src\zlib\1.2.3\zlib-1.2.3\下的所有頭文件和源文件(不包括子目錄)添加到項目文件平中。
5. 將\GnuWin32\src\zlib\1.2.3\zlib-1.2.3\win32下的zlib.def和zlib.rc兩個文件添加到項目中。
『拾』 codeblocks編譯zlib不成功,怎麼解決
你好。
根據你的描述:
codeblocks編譯zlib不成功,刪了zlib1.dll後好了,你可以嘗試!