opencv的跨平臺的安裝以及多版本并存

背景

遇到一個奇葩的項(xiàng)目,有的程序里調(diào)的是opencv2.4.13的版本,有的程序里調(diào)的是opencv3.2的版本,真實(shí)有意思!
程序員天生就是為解決問題而生的!想想該怎么解決吧!因?yàn)楸救艘彩墙佑|opencv 不太久,之前接觸的用的還是python接口。接下來我將簡單的闡述一下我解決這個問題的過程,僅此記錄一下這個過程。

解決的想法變化

  • 1.想到高版本可能向下兼容。
    這是我最初想出來的辦法,現(xiàn)在回想起來是多么的蠢。想到這個辦法后,我去官網(wǎng)上下載了opencv3.4.5
    并對其進(jìn)行安裝,這里簡單的說一下opencv的安裝過程
1.下載opencv 的源文件
2.確保pc上安裝有相關(guān)的基礎(chǔ)開發(fā)包,cmake,g++等
3.cd opencv源碼路徑
4.新建一個文件夾,用于存放編譯好的文件并進(jìn)入該文件夾中 mdir build && cd build 
5.如果沒有特殊的需求就直接 cmake ..
6.make && make install 

當(dāng)然對于版本沒有要求的話直接可以使用包管理器進(jìn)行安裝

yum  install  numpy  opencv*

安裝3.4.5的時候出現(xiàn)了一個錯誤,說是c++11的問題,應(yīng)該是g++的問題,多次重現(xiàn)安裝并沒有解決這個問題,于是在搜索過程中發(fā)現(xiàn)opencv 并不能做向下兼容,因?yàn)閛pencv2是相對龐大的,而opencv3則是相對精簡的接口之類的都有很大的變化,并且調(diào)用opencv的程序編譯好之后他只會搜索這個文件,比如libioencv_world.so.2.4,so文件都有對于的版本號。所以說并不是很好處理

  • 2.編譯多個版本
    無奈之下也只能編譯2個版本的opencv ,首先把opencv3.2按照上述的方法編譯一次,為了省時間,直接從另一臺計(jì)算機(jī)復(fù)制處理相關(guān)的opencv包,并把該路徑加入lib的搜索路徑之下,如何加入搜索路徑這里稍微說一下
1. 進(jìn)入  /etc/ld.so.conf.d/
2. 新建一個文件 vi opencv2.4
3. 在文件里編寫上lib*的路徑比如  /usr/lcoal/opencv2.4
4. 然后ldconfig -v 就可以看到你添加的文件已經(jīng)到

但是這時候出現(xiàn)另一個奇怪的問題:

/lib64/libc.so.6: version `GLIBC_2.25' not found (required by /lib64/libgnutls.so.30) 

通過strings /lib64/libc.so.6 |grep GLIBC_命令看到 機(jī)器上的glib的版本是1.7的怪不得不行了,沒辦法又進(jìn)入了一次愚蠢的行動中--- 升級glib,從網(wǎng)上找了很多升級的方法,但是每次均以失敗告終,為什么會產(chǎn)生這樣的結(jié)果?通過分析,可以發(fā)現(xiàn)這個庫是系統(tǒng)非常底層的庫,只要提前卸載,或者安裝失敗都會造成系統(tǒng)不能使用?。ㄐ量嗫煺斩?,不然我的類似)在仔細(xì)分析,為什么會出現(xiàn)這個問題。因?yàn)槲覐?fù)制的別的機(jī)器的lib文件,極有可能是因?yàn)?,編譯這個文件的機(jī)器版本較高。

  • 3.重新編譯lib文件
    找到問題的關(guān)鍵,只能是自己重新編譯一次opencv,并重新把項(xiàng)目中的lib文件也重新編譯一次。這下就解決了。

做工程是一件需要認(rèn)真的事情,通過這次事情又如下幾點(diǎn)感受

  • 1.團(tuán)隊(duì)協(xié)作盡量都統(tǒng)一版本,特別是在跨平臺的時候,項(xiàng)目中編譯版本號都需要寫明白。g++的版本,glib的版本,這些影響很大的。
  • 2.沒做過的事情盡可能的多做調(diào)查,以減少踩坑的次數(shù)。
  • 3.很好用的命令ldd ** 可以很快的查出相關(guān)的依賴。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容