一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

交叉編譯opencv

 特—亮 2015-02-10

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)


應(yīng)該是我的電腦里沒有安裝CUDA的庫,因為后面的開發(fā)中也不會用到CUDA,所以我將 WITH_CUDA的鉤去掉,然后再點擊一次Configure按鈕,看看還有沒有提示缺少哪些第三方庫,網(wǎng)上其他文章說WITH_TIFF要去掉,但是這里沒有報錯就不管它了。同時可以將CMAKE_INSTALL_PREFIX改成你想要的路徑,這個路徑所opencv最后庫文件和頭文件的安裝路徑。在不存在其他問題后點擊Generate生存Makefile文件,如果前面第三方的問題沒有解決這里是會報錯而無法生存Makefile。生成的Makefile文件和Cmake配置文件都在 Wher to build the binarier 中設(shè)置的文件夾下



在終端窗口中進入 Wher to build the binarier 中設(shè)置的文件夾下執(zhí)行make指令,make失敗提示如下


../../lib/libopencv_core.so: undefined reference to `pthread_spin_init'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_unlock'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_lock'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_destroy'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_trylock'


找不到pthread鏈接庫,打開文件夾下的CmakeCache.txt進行修改

//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt

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'
mathinline.h在/usr/include/bits/和/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/include/bits/目錄下都有,這個時候優(yōu)先選擇了/usr/include下的mathinline.h,于是編譯就出錯了,那之前在Operating System為arm-linux時為什么沒有這個錯誤呢?筆者認為可能是在arm-linux時會默認先搜索電腦中配置的arm-linux的路徑也就是/opt/FriendlyARM/toolschain/4.5.1/下的include文件夾,而如果設(shè)置成Linux則優(yōu)先搜索/usr/include。因此要將include Mode選擇成Search only in Target Root,這樣編譯的時候就只會在/opt/FriendlyARM/toolschain/4.5.1/文件夾下搜索頭文件了。

接著后面和前面一樣所去掉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)什么。其實我才移植了一個軟件而已,哈哈!





    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲国产av精品一区二区| 日韩不卡一区二区三区色图| 丝袜破了有美女肉体免费观看| 亚洲一级二级三级精品| 韩国激情野战视频在线播放| 加勒比人妻精品一区二区| 综合久综合久综合久久| 老熟妇2久久国内精品| 成人日韩视频中文字幕| 午夜福利精品视频视频| 亚洲国产性生活高潮免费视频| 亚洲精品福利入口在线| 国产免费一区二区三区av大片| 欧美午夜不卡在线观看| 国产又粗又猛又爽色噜噜| 日韩一级毛一欧美一级乱| 日韩欧美亚洲综合在线| 欧美成人精品国产成人综合| 日本高清不卡一二三区| 国产毛片对白精品看片| 国产精品内射视频免费| 在线免费不卡亚洲国产| 国产精品日韩欧美一区二区| 亚洲一区二区欧美激情| 亚洲精品有码中文字幕在线观看| 国产精品一区二区有码| 欧美日韩精品一区二区三区不卡 | 日韩精品视频一二三区| 福利专区 久久精品午夜| 日韩性生活片免费观看| 日韩高清毛片免费观看| 在线观看免费无遮挡大尺度视频| 99国产精品国产精品九九| 成人午夜在线视频观看| 出差被公高潮久久中文字幕| 国产精品视频一区二区秋霞| 福利专区 久久精品午夜| 国产伦精品一一区二区三区高清版 | 老富婆找帅哥按摩抠逼视频| 久久精品国产亚洲av久按摩 | 色婷婷视频国产一区视频|