opencv版本的查詢
相關(guān)的一些開發(fā)依賴于opencv對(duì)應(yīng)的版本。如果版本不匹配忧额,可能就達(dá)不到要的目的。
·pkg-config opencv4 --modversion· 通過(guò)這個(gè)命令可以查詢到當(dāng)前環(huán)境中安裝的opencv版本。
編譯依賴opencv時(shí)如何寫make file
當(dāng)開發(fā)過(guò)程中使用第三方庫(kù)時(shí)电爹,我們?cè)趍akefile中需要指定第三方庫(kù)的頭文件位置,對(duì)應(yīng)的庫(kù)位置等等料睛。pkg-config可以快速的生成編譯需要的頭文件或者庫(kù)文件位置指定丐箩。典型的用法如下
g++ test.c 'pkg-config opencv4 --cflags --libs'
'pkg-config opencv4 --cflags --libs'
在命令行下執(zhí)行后的實(shí)際輸出是 '-I /user/local/include/opencv4 -L/user/local/lib ....' 可以看到編譯需要的一些路徑自動(dòng)生成了。
其中--cflags是獲取編譯包需要的預(yù)處理或者編譯選項(xiàng)恤煞。 --libs是獲取編譯包所需要的鏈接選項(xiàng)屎勘。
編譯時(shí)找不到對(duì)應(yīng)的頭文件
如果opencv正確安裝,編譯時(shí)使用pkg-config生成依賴路徑居扒,一般不會(huì)有問(wèn)題概漱。如果實(shí)在找不到,就要知道gcc尋找頭文件的規(guī)則
- gcc編譯文件查找頭文件喜喂,首先是通過(guò)makefile中-I找到路徑進(jìn)行查找
- 查找gcc的環(huán)境變量C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH 所以你可以通過(guò)export這些環(huán)境變量犀概,來(lái)幫助gcc找到頭文件
- gcc最后會(huì)查找系統(tǒng)默認(rèn)的指定目錄。如:/usr/include /usr/local/include /usr/lib/gcc-lib/..../include等
編譯時(shí)或者運(yùn)行時(shí)程序提示找不到opencv的動(dòng)態(tài)鏈接庫(kù)
編譯時(shí)
- 編譯時(shí)gcc會(huì)優(yōu)先查找-L指定的動(dòng)態(tài)庫(kù)路徑
- 緊接著查找
LD_LIBRARY_PATH
指定的目錄 - 最后查找系統(tǒng)默認(rèn)的目錄 /lib /usr/lib /usr/local/lib 等等
運(yùn)行時(shí)
- 在編譯的時(shí)候夜惭,可以指定運(yùn)行程序運(yùn)行時(shí)在指定的目錄去找動(dòng)態(tài)庫(kù)
gcc -Wl,-rpath=./ -Wl,-rpath=./mylib/
表示編譯好的程序在運(yùn)行的時(shí)候優(yōu)先在當(dāng)前目錄和mylib目錄下找需要的動(dòng)態(tài)庫(kù)姻灶。 - 查找
LD_LIBRARY_PATH
指定的目錄 - 通過(guò)系統(tǒng)環(huán)境ldconfig配置的路徑
- 系統(tǒng)默認(rèn)的庫(kù)路徑
用到opencv庫(kù)的程序運(yùn)行報(bào)錯(cuò)
undifined symbol _ZN2cv3dnn14dnn4_v202009083NetD1Ev
解決辦法是,用二進(jìn)制查看運(yùn)行文件(bycompare)查找前半段符號(hào)_ZN2cv3dnn14dnn4找到后根據(jù)上下文知道這個(gè)符號(hào)屬于opencv dnn庫(kù)的诈茧。程序運(yùn)行時(shí)找不到产喉,說(shuō)明運(yùn)行時(shí)查找的opencv庫(kù)和編譯時(shí)的庫(kù)版本不一致,可以根據(jù)后面的日期敢会,找到對(duì)應(yīng)的opencv版本曾沈,在運(yùn)行環(huán)境上安裝替換一下。從而解決問(wèn)題
opencv的安裝
一定要選對(duì)需要的版本鸥昏,然后從官網(wǎng)下載
https://opencv.org/releases/
安裝方法參考docs.opencv.org
里面查找installation
需要注意的是塞俱,如果想讓pkg-config 生效,在編譯opencv的時(shí)候要使用-DOPENCV_GENERATE_PKGCONFIG=ON選項(xiàng)吏垮,具體參考文檔說(shuō)明障涯。
注意安裝前提是cmake 和 g++ 已經(jīng)安裝成功罐旗,然后可以在官網(wǎng)上下載zip包源文件,然后根據(jù)說(shuō)明進(jìn)行build唯蝶。
安裝過(guò)程示例如下
unzip opencv-4.5.3.zip
mv opencv-4.5.3 opencv
mkdir build
cd build
cmake -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv
make -j4
sudo make install
最后要運(yùn)行l(wèi)dconfig九秀, 讓系統(tǒng)更新新的動(dòng)態(tài)鏈接庫(kù)
sudo ldconfig