PC系統(tǒng):Ubuntu ARM開發(fā)板:Tiny210 linux 在這里我將介紹兩種編譯方法,但是在我移植軟件的過程中發(fā)現(xiàn)第一種方法是存在很大問題的,建議使用第二種方法。 方法一: 首先電腦得先安裝arm-linux的交叉編譯環(huán)境,這里就不介紹這個了,直接說重點。 1、在終端窗口輸入sudo apt-get install cmake-qt-gui下載cmake圖形界面 2、安裝好后在終端窗口輸入cmake-gui打開cmake的gui界面
在“where is the source code”中填入電腦中opencv源碼的位置,“where to build the binaries”填入生成make編譯文件的位置,然后點擊configure按鈕,選擇最后一項
點擊NEXT再跳出的界面中做如下設(shè)置 Operating System 選擇目標系統(tǒng)arm-linux Compilers中選擇交叉編譯器的gcc和g++ Target Root選擇交叉編譯器的路徑
點擊Finish按鈕,開始生成配置文件,但是這個時候會報錯 System is unknown to cmake, create: Platform/arm-linux to use this system, please send your config file to cmake@www.cmake.org so it can be added to cmake 這個是因為Operating System填寫的arm-linux不算Cmake能識別的目標系統(tǒng),這里可以忽略這個錯誤。但是這個時候還有其他錯誤 CMake Error at cmake/FindCUDA.cmake:763 (if): if given arguments:
"CUDA_VERSION" "VERSION_GREATER" "5.0" "AND" "CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm"
Unknown arguments specified Call Stack (most recent call first): cmake/OpenCVDetectCUDA.cmake:26 (find_package) cmake/OpenCVFindLibsPerf.cmake:24 (include) CMakeLists.txt:468 (include)
在終端窗口中進入 Wher to build the binarier 中設(shè)置的文件夾下執(zhí)行make指令,make失敗提示如下
../../lib/libopencv_core.so: undefined reference to `pthread_spin_init'
找不到pthread鏈接庫,打開文件夾下的CmakeCache.txt進行修改 //Flags used by the linker. lrt這個不知道是什么,只是網(wǎng)上其他文章說要加上我就也加上了,然后再繼續(xù)編譯,編譯完成后執(zhí)行指令make install安裝庫文件和頭文件到CMAKE_INSTALL_PREFIX指定的文件夾下。雖然網(wǎng)上有很多文章寫的都是用這個方法,都是這個方法是有問題的,前面所提到的configure時提示的System is unknown to cmake,這個錯誤是直接被我忽略的,都是其實這個是很有問題的,因為CMake編譯過程中我們沒有告訴編譯器我們要用的是是哪個系統(tǒng),那有些功能它就不知道是選擇編譯和window兼容的代碼,還是和linux兼容的代碼,比如我在后面用這個編譯好的opencv庫寫的程序放到210的板子上運行時,軟件自帶的函數(shù)cvCreatCamerCapture沒辦法識別板子上的usb攝像頭,在谷歌查了很久才發(fā)現(xiàn)是編譯的時候沒有支持V4L2,后來發(fā)現(xiàn)是目標系統(tǒng)選擇的問題,下面的另一種方法將解決這個問題。
方法二 : 前面再configure時提示的System is unknown to cmake是被我忽略不管的下面介紹下不忽略這個錯誤的編譯過程。 出現(xiàn)這個錯誤的原因是Cmake不能識別arm-linux這種系統(tǒng),所以我們把他改成Linux,注意第一個字母大寫,不能寫錯linux,否則還會出現(xiàn)那個錯誤
另外需要注意的是include Mode要選擇成Search only in Target Root這樣在后面opencv編譯時搜索頭文件就只會在Target Root指定的文件夾下搜索,而不會到你電腦的usr/include/下搜索,如果這里還是先前的search in Target Root, then native system則會到/usr/include/下搜索頭文件,就會出現(xiàn)一些問題,在我的電腦中出現(xiàn)了下面的問題
/usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm' /usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm' /usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm' 接著后面和前面一樣所去掉CUDA第三方庫,更改CMAKE_INSTALL_PREFIX,更改后記得再點擊一次configure然后再點擊Generate,進入文件夾修改CmakeCache.txt,make,這個時候又報錯了: undefined reference to `dlopen' 沒有找到dl庫,繼續(xù)修改CmakeCache.txt CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl 編譯好后make install,這個時候其實大家會發(fā)現(xiàn)這個方法編譯出來的鏈接庫比第一種方法編譯出來的鏈接庫要多一些,在目前的嵌入式開發(fā)階段中使用這個鏈接庫還沒有發(fā)現(xiàn)什么。其實我才移植了一個軟件而已,哈哈!
|
|