移植opencv到arm 轉


http://blog.163.com/yankang0612@126/blog/static/16418746420114190365981/?latestBlog

平台是TQ2440開發板,編譯器版本時4.3.3。首先下載opencv2.2.0源碼和cmake-gui工具,解壓到/usr/local目錄下,在/usr/local目錄下建opencv-arm文件夾,同時建一個目錄arm用來放置最終生成的文件,
   在終端運行cmake-gui  選擇源代碼目錄:/usr/local/OpenCV-2.2.0
   選擇Build目錄:/usr/local/opencv-arm/
   點擊Configure,保持generator為Unix Makefiles,選擇Specify options for cross-compiling,點擊Next
   Operating System填寫arm-inux
   C Compilers填寫/opt/EmbedSky/4.3.3/bin/arm-linux-gcc
   C++ Compilers填寫/opt/EmbedSky/4.3.3/bin/arm-linux-g++
   程序庫的Target Root填寫/opt/EmbedSky/4.3.3/,然后點擊Finish

   修改默認配置,默認安裝目錄為/usr/local,為便於查找生成的庫文件,把CMAKE_INSTALL_PREFIX變量改為/usr/local/arm  ,點擊Generate生成Makefile 然后make,
    到59%的時候出錯,/usr/local/OpenCV-2.2.0/modules/highgui/src/grfmt_png.cpp:55:24: error: libpng/png.h: No such file or directory
結果在OpenCV-2.2.0/3rdparty/libpng/下找到了png.h,在png.cpp下補全路徑,錯誤消失。繼續make。
   在79%出錯,OpenCV-2.2.0/modules/ml/src/gbt.cpp:474: error: 'expl' was not declared in this scope;修改gdb.cpp,注釋掉#if android 和#endlf,繼續。
  在81%時出錯,http://www.cnblogs.com/lib/libopencv_haartraining_engine.a(cvhaartraining.obj): In function `cvCreateTestSamples(char const*, char const*, int, int, char const*, int, int, int, double, double, double, int, int, int)':
cvhaartraining.cpp:(.text._Z19cvCreateTestSamplesPKcS0_iiS0_iiidddiii+0x454): undefined reference to `cvShowImage'
cvhaartraining.cpp:(.text._Z19cvCreateTestSamplesPKcS0_iiS0_iiidddiii+0x45c): undefined reference to `cvWaitKey'
cvhaartraining.cpp:(.text._Z19cvCreateTestSamplesPKcS0_iiS0_iiidddiii+0x534): undefined reference to `cvNamedWindow'
http://www.cnblogs.com/lib/libopencv_haartraining_engine.a(cvhaartraining.obj): In function `cvCreateTrainingSamples(char const*, char const*, int, int, char const*, int, int, int, double, double, double, int, int, int)':
找了好長時間問題,還是沒有答案,希望那位知道怎么改的能告訴我,
我重新在/opt目錄下按照上述步驟解壓,make之后,順利到達79%,改完之后在81%出現http://www.cnblogs.com/lib/libcxcore.so: undefined reference to `clock_gettime'
    解決方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來為空,加上-lpthread -lrt,重新編譯,錯誤消除 。接着96%時。
出現錯誤,http://www.cnblogs.com/lib/libopencv_features2d.so: undefined reference to `cv::SIFT::SIFT(double, bool, bool, int, int, int, int)'
解決方法:在/opt/OpenCV2.2.0/modules/features2d/src/sift.cpp下 #ifdef __arm__
#define ARM_NO_SIFT
#endif   注釋掉#define ARM_NO_SIFT.錯誤消除,
好了,安全到達100%。
所以大家最好時把要建的opencv-arm和最終生成opencv的arm目錄和交叉編譯器放在同一個目錄下。至於為什么,我也想不明白阿。
之后make install
把生成的opencv頭文件和庫文件復制到交叉編譯器中:首先復制/opt/arm/include/opencv/下opencv2目錄和opencv下的.h文件到/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include目錄下。然后復制/opt/arm/lib下的庫文件到/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/lib下。
測試下arm-linux-g++ -lcv -lcxcore -lhighgui -lpthread -lrt -o test test.c 
生成二進制文件。
最后復制/opt/arm/lib下的庫文件到開發板的/lib/目錄下。復制test執行文件,如果正常執行,則說明我們的移植成功了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM