6
3

More than 5 years have passed since last update.

Ubuntu18.04でOpenCV3.4のほぼ完全体をbuildした

Posted at

就活もめんどくさくなってきて、なんとなくROS2用のUbuntu18.04開発機を作ろうと思ったらつまづき、
ちょっとつらくなったので、今後被害者をださないようにメモを公開。

またいろいろ込みでcmakeをbuildしたくなったので、再度編集して公開。

(僕の思考回路
就活やりたくない → ROS2触りたい → ESほっておいて開発機つくろー!)

OpenCVのbuildは完全体に近づくほど難しい

特にCUDAまわりが難しい。
今回はCUDAに加え、QTとVTKなどなどを加え、ほぼ完全体をbuildした。
(ここでほぼ完全体と言っているのは、pythonやJavaのバインディング生成していないため)

OpenCVの完全体については以下の記事にいろいろ書いてあった。
https://qiita.com/fukushima1981/items/fae7d40123bfdf426624

エラー

エラーが出たのは以下3点

1. cmakeが通らない
linux/videodev.h not found
sys/videoio.h not found
2. gccのバージョン

エラー内容

unsupported GNU version! gcc versions later than 6 are not supported

gccのバージョンを下げろと言われた気がしたので、
gcc-5とかでコンパイルしてみると、次のようなエラーが出ました。

3. CUDAのホストコンパイラgccのバージョン

エラー内容

c++: error: unrecognized command line option ‘-Wimplicit-fallthrough=3’; did you mean ‘-Wno-fallthrough’?
modules/core/CMakeFiles/opencv_core.dir/build.make:554: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/arithm.cpp.o' failed

どうしたらええんじゃ!と色々探して試してみたらできた。

対処方法

1. リンクを貼る
sudo ln -s /usr/include/libv4l1-videodev.h   /usr/include/linux/videodev.h 

これいいらしい。
sys/videoio.h not foundは無視するらしい。

以下参考にしたページ
https://qiita.com/_-_-_-_-_/items/8131b1b2ddaef6b0d18d
https://stackoverflow.com/questions/5842235/linux-videodev-h-no-such-file-or-directory-opencv-on-ubuntu-11-04

2. GCCのバージョンを指定する

gccのバージョンを指定する際、cmakeの前にCCやらCXXをつけるといいっぽい。
しかし、何故かcmake-guiでは通用しなかったので、cmakeオプションはコマンドで指定するほうがいい。

CC=gcc-6 CXX=g++-6 cmake .. -D...

以下参考にしたページ
https://github.com/opencv/opencv/issues/11552

3. NVCCのコンパイルオプションでコンパイル条件を緩める
-D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr 

さらに、nvccのホストコンパイラを指定することも行った。

-D CUDA_HOST_COMPILER=/usr/bin/gcc-6 \

以下参考にしたページ
https://github.com/justadudewhohacks/npm-opencv-build/issues/9

所感

今回実験的にubuntu18.04にblacklistとか何もせずcudaを入れてみたが難なくいけたのでとてもよかった。

OpenCVといえばdandelionさんですが、dandelionさんのgistにいい感じのシェルスクリプトが落ちてることにあとで気づいた。
僕もGistでまとめてみようかな...

まとめ

以下にざっくりメモしておいたので参考程度に

必要なパッケージをめちゃくちゃインストールする

sudo apt install gcc-6 g++-6 cmake build-essential git pkg-config ccache \
unzip ecm extra-cmake-modules fcitx-libs-dev libfcitx-qt5-1 \
mesa-utils libgtk2.0-dev libgtk-3-dev ffmpeg \
libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
libjpeg-dev libpng-dev libtiff5-dev x264 libxvidcore-dev yasm \
libxine2-dev libv4l-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev \
libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev \
x264 v4l-utils ffmpeg libdc1394-22 libdc1394-22-dev libtiff5-dev \
qt5-default libeigen3-dev libeigen3-doc tesseract-ocr tesseract-ocr-jpn \
vtk6 tcl-vtk6 python-vtk6 libgflags-dev autoconf automake libtool \
autoconf-archive libleptonica-dev libtesseract-dev gphoto2 liblapacke-dev \
libgoogle-glog-dev libprotobuf-dev libprotoc-dev protobuf-compiler \
libgphoto2-dev libvtk6-dev libvtk6-qt-dev liblapack-dev libatlas-base-dev \
gstreamer1.0

以下を参考
https://heruwakame.hatenablog.com/entry/2017/10/15/172454

リンク貼り直し

sudo ln -s /usr/include/libv4l1-videodev.h   /usr/include/linux/videodev.h 

ソースを持ってくる

cd ~/env # どこでもいいよ
git clone https://github.com/opencv/opencv
cd opencv
git checkout 3.4.5
cd ..
git clone https://github.com/opencv/opencv_contrib.git 
cd opencv_conrib
git checkout 3.4.5
cd opencv
mkdir build
cd build

cmakeする

CC=gcc-6 CXX=g++-6 cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D OPENCV_EXTRA_MODULES_PATH=${HOME}/env/opencv_contrib/modules \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D BUILD_opencv_apps=ON \
    -D BUILD_opencv_calib3d=ON \
    -D BUILD_opencv_core=ON \
    -D BUILD_opencv_cudaarithm=ON \
    -D BUILD_opencv_cudabgsegm=ON \
    -D BUILD_opencv_cudacodec=ON \
    -D BUILD_opencv_cudafeatures2d=ON \
    -D BUILD_opencv_cudafilters=ON \
    -D BUILD_opencv_cudaimgproc=ON \
    -D BUILD_opencv_cudalegacy=ON \
    -D BUILD_opencv_cudaobjdetect=ON \
    -D BUILD_opencv_cudaoptflow=ON \
    -D BUILD_opencv_cudastereo=ON \
    -D BUILD_opencv_cudawarping=ON \
    -D BUILD_opencv_cudev=ON \
    -D BUILD_opencv_features2d=ON \
    -D BUILD_opencv_flann=ON \
    -D BUILD_opencv_highgui=ON \
    -D BUILD_opencv_imgcodecs=ON \
    -D BUILD_opencv_imgproc=ON \
    -D BUILD_opencv_ml=ON \
    -D BUILD_opencv_objdetect=ON \
    -D BUILD_opencv_photo=ON \
    -D BUILD_opencv_stitching=ON \
    -D BUILD_opencv_superres=ON \
    -D BUILD_opencv_ts=ON \
    -D BUILD_opencv_video=ON \
    -D BUILD_opencv_videoio=ON \
    -D BUILD_opencv_videostab=ON \
    -D WITH_1394=ON \
    -D WITH_CUBLAS=ON \
    -D WITH_CUDA=ON \
    -D WITH_CUFFT=ON \
    -D WITH_EIGEN=ON \
    -D WITH_FFMPEG=ON \
    -D WITH_GDAL=OFF \
    -D WITH_GPHOTO2=ON \
    -D WITH_GIGEAPI=ON \
    -D WITH_GSTREAMER=ON \
    -D WITH_GTK=ON \
    -D WITH_INTELPERC=OFF \
    -D WITH_IPP=ON \
    -D WITH_IPP_A=OFF \
    -D WITH_JASPER=ON \
    -D WITH_JPEG=ON \
    -D WITH_LIBV4L=ON \
    -D WITH_OPENCL=ON \
    -D WITH_OPENCLAMDBLAS=OFF \
    -D WITH_OPENCLAMDFFT=OFF \
    -D WITH_OPENCL_SVM=OFF \
    -D WITH_OPENEXR=ON \
    -D WITH_OPENGL=ON \
    -D WITH_OPENMP=OFF \
    -D WITH_OPENNI=OFF \
    -D WITH_PNG=ON \
    -D WITH_PTHREADS_PF=OFF \
    -D WITH_PVAPI=ON \
    -D WITH_QT=ON \
    -D WITH_TBB=ON \
    -D WITH_TIFF=ON \
    -D WITH_UNICAP=OFF \
    -D WITH_V4L=ON \
    -D WITH_VTK=ON \
    -D WITH_WEBP=ON \
    -D WITH_XIMEA=OFF \
    -D WITH_XINE=OFF \
    -D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \
    -D CUDA_FAST_MATH=ON \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr \
    -D CUDA_HOST_COMPILER=/usr/bin/gcc-6 \
    ..

cmakeが成功したらmakeする

make -j 6

makeが成功したらinstall

sudo make install
sudo ldconfig

参考文献

https://github.com/opencv/opencv/issues/12429
https://github.com/opencv/opencv/issues/11552
https://github.com/xmrig/xmrig-nvidia/issues/134
https://www.kunihikokaneko.com/dblab/linuxsoft/ubuntu_opencv_buildout.html
https://github.com/justadudewhohacks/npm-opencv-build/issues/9
https://qiita.com/LxrunYutaKojima/items/41535afdf7af4d3e6ed8
https://qiita.com/_-_-_-_-_/items/8131b1b2ddaef6b0d18d

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3