一、編譯環境及庫文件 linux環境:ubuntu12.04 交叉編譯:4.3.2 arm板子:iTOP4412開發板 libz: libjpeg: libpng: libyasm: opencv: libx264: libxvid: lffmpeg: cmake: 二、opencv-2.4.9的移植過程 1、libz的交叉編譯: # ./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/zlib-install --shared 修改makefile CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,--version-script,zl lib.map (不一樣沒關系只改前面編譯器) #make #make install 2、libjpeg的交叉編譯: #./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libjpeg-install --enable-shared --enable-static #make #make install 3、libpng的交叉編譯: #./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libpng-install --enable-shared --enable-static #make #make install 4、yasm的交叉編譯: #./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/yasm-install --enable-shared --enable-static #make #make install 5、libx264的交叉編譯: #CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libx264-install #make #make install 6、libxvid的交叉編譯: #cd build/generic #./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libxvid-install --host=arm-linux --disable-assembly #make #make install 7、ffmpeg的交叉編譯: ./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ffmpeg-install --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale #make #make install ************************************************************************** 到此所有依賴庫編譯安裝完成 安裝目錄在:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ 每個庫有各自的-install文件夾 新建文件夾 #mkdir /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/ 然后拷貝所有-install下的lib下的文件到opencv-depend目錄下 *************************************************************************** 8.cmake-gui安裝(自己下載) 到官網上下載已經編譯好的cmake-2.8.8-Linux-i386.tar,gz,解壓就可以了 9、opencv2.4.9的交叉編譯: 用到的主要目錄說明: 交叉編譯工具鏈所在目錄 /usr/local/arm/4.3.2/ 安裝opencv的目錄 /usr/local/arm/opencv-install opencv源碼所在目錄 /usr/local/arm/opencv2.4.9 編譯好的opencv庫所在目錄 /usr/local/arm/opencv-2.4.2/build 10.配置cmake(這一步的目的是配置編譯器并讓cmake-gui找到所有共享庫不然cmake-gui會少很多選項因為沒有發現依賴庫,例如你直接cmake-gui就沒有v4l選項,直接導致移植成功后無法打開攝像頭,別問我是怎么知道的..說多了都是淚啊) #cd opencv-2.4.9 #mkdir build #cd build #vim toolchain.cmake 內容如下 ###########user defined############# set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc ) set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ ) ###########user defined############# set( CMAKE_FIND_ROOT_PATH" /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/ " ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) ###################################### 然后執行這一步 #cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../ 配置cmake-gui #cmake-gui 選擇源代碼目錄/usr/local/arm/opencv-2.4.9/ 選擇Build目錄:/usr/local/arm/opencv-2.4.2/build 點擊Configure,保持generator為Unix Makefiles(不用改),選擇Specify options for cross-compiling(最后一個選項),點擊Next, Operating System填寫arm-linux C Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-gcc C++ Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-g++ 程序庫的Target Root填寫/usr/local/arm/4.3.2/ 然后點擊Finish。 默認安裝目錄為/usr/local,改為/usr/local/arm/opencv-install(因為之前安裝了x86的opencv在usr/local為了避免弄混了) CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install 修改選項(如果不改make會出現很多錯誤因為找不到庫) 去掉WITH_CUDA 去掉WITH_GTK 去掉WITH_1394 去掉WITH_GSTREAMER 去掉WITH_LIBV4L(后邊有v4l這個沒用不要選) 去掉WITH_TIFF 去掉BUILD_OPENEXR 去掉WITH_OPENEXR 去掉BUILD_opencv_ocl 去掉WITH_OPENCL 完成后Generate 修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來為空,加上-lpthread -lrt, 點擊Generate生成Makefile。(203行附近有小引號可以帶著像這樣'-lpthread -lrt') #make(出現錯誤一般是選多了或者前面做錯了make clean) #make install ************************************************************************************************ 最后 還有一步特別關鍵 ,需要把/usr/local/arm/opencv-install/lib 下所有的動態鏈接庫 拷貝到交叉編譯下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib下 ************************************************************************************************ 三、測試 測試程序:(qt設置) 1.將/usr/local/arm/opencv-install/lib/下的庫拷貝到開發板/lib/下 2.#mkdir /usr/local/arm/opencv-install/lib/ 并拷貝上述庫到mkdir /usr/local/arm/opencv-install/lib/ 3.拷貝opencv-depend下庫到開發板/lib/下 4.拷貝測試程序到開發板/bin/目錄下賦予可執行權限chmod 777 CamaraGet 5. cd /bin/ ./ CamaraGet –qws & (如果提示庫找不到原因是你編譯的庫建立了類似快捷方式的東西而你拷貝的庫沒有拷貝快捷方式所以程序連接的時候找不到快捷方式,可以將你的庫改名成提示缺少的庫名(快捷方式名)基本上就是去掉版本后綴例如 ( mv libopencv_core.so.2.4.9 libopencv_core.so.2.4 ) 以下是文件目錄示例 開發板USB攝像頭預覽節點是/dev/video4 opencv調cam = cvCreateCameraCapture(204); 這個函數的意思是打開video4網上很多討論括號里的參數只要有: 0 , -1, 202單要根據你自己的情況改,實測204(在板子上可以) |