Linux下安裝opencv並移植至ARM

目的:

OpenCV是Intel支持的開源計算機視覺庫。它由一系列C函數和少量C++類構成,實現了圖像處理和計算機視覺方面的很多通用算法。它不依賴於其它的外部庫—儘管也可以使用某些外部庫。OpenCV使用BSD License,對非商業應用和商業應用都可以免費使用。OpenCV的主要應用環境是Windows和Linux,本文主要介紹於嵌入式系統下的安裝。

開發環境:

Linux版本:fedora24

Opencv版本:opencv-2.1.0 ( 下載地址:http://opencv.org/ )

移植opencv2.4.2編譯arm程序時

arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/arm/opencv/include/opencv -L /usr/local/arm/opencv/lib -lopencv_core -lopencv_highgui

出現如下錯誤:

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcxcore.so, needed by /usr/local/arm/opencv-2.1/lib/libcv.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcv.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libhighgui.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libml.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)

讀了這邊作者的博文:http://blog.csdn.net/yanzi1225627/article/details/7524698,發現他遇到的和我類似的問題,且嘗試了多種方式也沒能解決,最終我也和他一樣走向了放棄Opencv2.4.2的道路,轉向Opencv2.0。其中也嘗試了他提供的解決方法,並參考博文:http://blog.sina.com.cn/s/blog_602f87700100nyda.html

在交叉編譯中LFLAGS即-L換成-Wl,-rpath-link -Wl,發現這個問題是不見了,但是盡然出現了找不到.so的庫文件,我也無語了,這在之前已經解決的問題又回來了,拷貝了庫也設置了路徑,老問題又出現了,被打回十年前的感覺很痛苦。arm-none-linux-gnueabi缺少這樣的庫,拷貝過去就行了,發現不行,且這篇文庫尼瑪是複製的之前好幾個博主的文章,原文不動,都不知道有沒有試過。沒辦法只能放棄Opencv2.4.2了。

交叉編譯工具:arm-linux-gcc-4.3.2

安裝與配置:

1.安裝CMake:
下載地址:https://cmake.org/download/
./bootstrap
make
make install
2.編譯OpenCV:
A.解壓文件
B.創建/usr/local/opencv-arm/目錄,作爲CMake編譯arm版本的工作目錄
C.在X環境下,運行cmake-gui:
這裏寫圖片描述

a.選擇源代碼目錄:/usr/local/OpenCV-2.1.0
b.選擇Build目錄:/usr/local/opencv-arm/
c. 點擊Configure,保持generator爲Unix Makefiles,選擇Specify options for cross-compiling,點擊Next
d. Operating System填寫arm-inux
e. C Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-gcc
f. C++ Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-g++
g.程序庫的Target Root填寫/usr/local/arm/4.3.2/
h.點擊Finish
i.修改默認配置,默認安裝目錄爲/usr/local,對於交叉編譯的庫來說並不合適,所以我把CMAKE_INSTALL_PREFIX變量改爲/usr/local/arm/lib/opencv/
j.點擊Generate生成Makefile

D.在終端界面中,進入目錄/usr/local/opencv-arm,運行make編譯opencv

編譯時發現如下錯誤:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to clock_gettime'
../../lib/libcxcore.so: undefined reference to
pthread_key_create’
../../lib/libcxcore.so: undefined reference to pthread_getspecific'
../../lib/libcxcore.so: undefined reference to
pthread_setspecific’

../../lib/libopencv_ocl.so:undefined reference to ‘dlopen’

原因是cmake不認識我定義的arm-linux系統標記,沒有加上庫pthread和rt的鏈接選項

E.修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來爲空,加上-lpthread -lrt -ldl,重新編譯,錯誤消除
F.運行make install,將opencv生成的庫和頭文件安裝到目錄/usr/local/arm/lib/opencv/

測試OpenCV庫:

參考另一篇博客:http://blog.csdn.net/noodies/article/details/5798434

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章