Opencv3.2移植到arm板

注:博客中有些圖片部分爲了省事,借用了別人博客的圖片,相關部分注意事項相同。若有侵權,請聯繫刪除!

一,Opencv3.2移植到arm

Opencv3.2

ubuntu16.04

目標板:飛凌嵌入式iMx6-ul

前一:把opencv源碼,/modules/highgui/src/windows.cpp  文件第583行和654行註釋掉!!!非常重要!!! 

  583 行: CV_NO_GUI_ERROR("cvshowImage")

  654行:CV_NO_GUI_ERROR("cvWaitKey")  

不然程序運行時會提示如下讓先安裝gtk+2.x之類的錯誤。應該是沒有顯示屏顯示的原因。

  “OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow”

1,配置交叉編譯環境,見imx6-ul軟件手冊

2,在源碼目錄下打開終端  /cmake-gui      // 啓動cmake

在cmake界面中進行配置  

第一步:

第二步:

第三步:

1),下圖爲網上流傳非常廣泛的配置方法:在這個配置中填寫的目標系統的名稱會導致opencv庫中V4L無法使用(因爲在本次工程中沒有使用opencv的V4L驅動庫,可以忽略),應該爲“Linux”

2),注意編譯器的選擇爲交叉編譯器,與下圖中的區別。

3),target root 注意事項與下圖相同

第四步:

1),建議使用靜態庫編譯,選擇動態庫編譯需要把動態庫拷貝到arm板中,比較麻煩。

 

第五步:

4.按照上述配置完成後,進入編譯文件目錄(進入自己配置的目錄)


然後執行 make 進行編譯

 

鑑於網上的參考教程,大多數人這裏會報錯,這裏將錯誤總結如下:

(1)報錯:

Linking CXX executable ../../bin/opencv_test_calib3d

../../lib/libopencv_core.so: undefined reference to`pthread_key_create'

../../lib/libopencv_core.so: undefined reference to`pthread_getspecific'

....................

collect2: ld returned 1 exit status

make[2]: *** [bin/opencv_test_calib3d] Error 1

make[1]: ***[modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2

make: *** [all] Error 2

 

或者

報錯:undefined reference  to  “dlopen”

     undefined  reference  to  “dlysm”

解決方案:修改上圖中“編譯文件目錄”目錄下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來爲空,保險起見,加上-lpthread -lrt -ldl,如下圖:

5.報錯按照上述方法解決,再make後,執行sudo make install ,此時編譯好的庫就按照在你指定的目錄下了.

NOTE: 如果sudo make install 出現 Cmakeerror at apps/annotation/cmake_install.cmake:42(FILE):之類的錯誤,直接打開文文件 apps/annotation/cmake_install.cmake把42行註釋掉。

  (一共有3個類似錯誤,對應三個文件,我這是都在第42行,都註釋掉)

6.進入上述的安裝庫,若沒有取消BUILD_SHARED_LI選項,則生產的是.so後綴的庫文件,將這些庫文件拷貝到板子的/lib目錄下。

二,工程代碼編譯

7.在Ubuntu上編譯的時候,建議使用CMakeList.txt 通過cmake編譯

  因爲需要交叉編譯,配置方法如下:

  

 

配置完makefile之後,直接make生成可執行文件,如果opencv爲靜態庫,可執行文件拷貝至板子中即可運行。

8.CMakeLists.txt編譯方式;

  1), Linux下undefined reference to ‘pthread_create’’pthread _join’問題

 在自己的工程目錄下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS,加上-lpthread -lrt –ldl。

 

9,若電腦中裝有多個版本的opencv,使用指定的OPENCV版本

   在CMakeLists.txt文件中設置opencv文件夾路徑

 

在cmake-gui中指定路徑


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