ubuntu18編譯安裝opencv3.4.3
1. 配置
基本配置 | 版本號 |
---|---|
CPU | Intel® Core™ i5-8400 CPU @ 2.80GHz × 6 |
GPU | GeForce RTX 2070 SUPER/PCIe/SSE2 |
OS | Ubuntu18.04 |
openjdk | 1.8.0_242 |
python | 3.6.9 |
gcc | 5.5 |
g++ | 8.4 |
opencv | 3.4.3 |
cmake | 3.17.2 |
protobuf | 3.0.0 |
hint:
- 如何多版本gcc,g++共存並且切換: https://blog.csdn.net/weixin_43056275/article/details/105124979
- 如何安裝cmake: https://www.cnblogs.com/jsdy/p/11759247.html
- 注意: 編譯caffe和openpose所使用的opencv必須版本一致, 不然到最後會報錯.
- opencv版本4.0以上測試openpose會報錯:. 錯誤: opencv-4.0.0/modules/highgui/src/window_gtk.cpp:146: error: (-215:Assertion failed) dst.data == widget->original_image->data.ptr in function ‘cvImageWidgetSetImage’
2. opencv3.4.3安裝編譯
2.1 下載源碼
https://github.com/opencv/opencv/archive/3.4.3.tar.gz
解壓後得到opencv-3.4.3
2.2 安裝依賴庫
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
2.3 編譯opencv3.4.3
cd opencv3.4.3
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv343 ..
make all -j16
make install
2.4 配置環境變量
配置環境變量
1. 打開文件:
sudo gedit /etc/ld.so.conf.d/opencv.conf
2. 將以下內容添加到最後:
/usr/local/opencv343/lib
3. 接下來配置庫:
sudo ldconfig
4. 更改環境變量:
sudo gedit /etc/bash.bashrc
5. 在文件後添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv343/lib/pkgconfig
export PKG_CONFIG_PATH
6. 保存關閉
source /etc/bash.bashrc 重啓終端
測試
打開opencv-3.4.3/samples/cpp/example_cmake, 打開終端輸入下面的代碼
cmake .
make
./opencv_example
出現 Hello OpenCV 即是成功!
3. 編譯opencv踩坑記錄
問題1:
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: 沒有那個文件或目錄
解決1:
cmake時加上 -DENABLE_PRECOMPILED_HEADERS=OFF
問題2:
.build_release/tools/caffe: error while loading shared libraries: libcudart.so.10.0
解決2:
sudo cp /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 && sudo ldconfig
sudo cp /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 && sudo ldconfig
sudo cp /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 && sudo ldconfig
問題3:
源碼編譯opencv卡在IPPICV: Download: ippicv_2017u3_lnx_intel64_general_20180518.tgz
解決3:
手動下載
https://download.csdn.net/download/weixin_43056275/12402359
如果想要其他版本的ippicv, https://github.com/opencv/opencv_3rdparty在這個鏈接選擇你想要的branch下載.
下載之後將ippicv_2017u3_lnx_intel64_general_20180518.tgz放在opencv-3.4.3/3rdparty/ippicv/downloads(自己新建), 修改opencv-3.4.3/3rdparty/ippicv/ippicv.cmake的內容.
將47行 “https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/”
改成
“file:/home/ying/usb/opencv3.4.2/opencv-3.4.3/3rdparty/ippicv/downloads/”
注意一定要加 file:
然後重新cmake
問題4:
runtime library [libcublas.so.10.0] in /usr/local/cuda/lib64 may be hidden by files in: /usr/local/lib
/usr/bin/ld: cannot find -lcudart /usr/bin/ld: cannot find -lcurand /usr/bin/ld: cannot find -lcudnn
問題4解決:
原因是之前安裝opencv默認直接安裝到/usr/local, 導致cmake訪問了多個libcublas.so.10.0. 解決: 卸載乾淨opencv, 先在build中sudo make uninstall, 然後手動刪除/usr/local/lib中沒有刪除乾淨的文件, 如下圖.
刪除/usr/local/share中的OpenCV, /usr/local/include中的opencv和opencv2.
重新下載編譯opencv時, 注意一定要指定到一個空的文件夾, 並且必須要/usr/local下, 不然openpose找不到(就算指定opencv路徑也找不到). 比如cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv343 … 指定到/usr/local/opencv343目錄下.