I am trying to build opencv from source to enable GStreamer support. I have followed this instructions here, but an error occurred. More specifically, the error occurred in this step:
make -j$(nproc)
The overall procedure is this one:
sudo apt update
sudo apt install -y \
build-essential cmake git pkg-config \
libjpeg-dev libtiff-dev libpng-dev \
libavcodec-dev libavformat-dev libswscale-dev \
libv4l-dev libxvidcore-dev libx264-dev \
libgtk-3-dev libatlas-base-dev gfortran \
python3-dev python3-numpy \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
cd ~
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
git checkout 3.4.18 # I used this version because I had the same one working in venv on a pip version
cd ../opencv_contrib
git checkout 3.4.18
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_GSTREAMER=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D BUILD_opencv_python3=ON \
-D BUILD_EXAMPLES=OFF ..
make -j$(nproc) # <- this is where the error is thrown
sudo make install
sudo ldconfig
The error is this one:
[ 43%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/layers/layers_common.avx2.cpp.o
[ 43%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/layers/layers_common.avx512_skx.cpp.o
[ 44%] Linking CXX shared library ../../lib/libopencv_dnn.so
[ 44%] Built target opencv_dnn
[ 44%] Linking CXX shared library ../../lib/libopencv_features2d.so
[ 44%] Built target opencv_features2d
make: *** [Makefile:166: all] Error 2
and as I understand it there is an issue with libopencv_features2d.so library. Inside the build folder there is a lib subfolder which contains libopencv_features2d.so (it is a symlinc to libopencv_features2d.so.3.4.18 in reality).
I tried to apply some flags to the CMake to give more information and to my surprise the process seemed to move forward. I am not sure if it actually fixed the error or just moved on but it reached a point where it doesn't get any better.
[ 44%] Built target opencv_dnn
[ 44%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o
[ 46%] Built target opencv_calib3d
[ 46%] Built target opencv_text
[ 46%] Built target opencv_stereo
[ 46%] Built target opencv_structured_light
[ 47%] Built target opencv_rgbd
[ 48%] Built target opencv_objdetect
[ 49%] Built target opencv_aruco
[ 50%] Built target opencv_xfeatures2d
[ 50%] Built target opencv_bgsegm
[ 52%] Built target opencv_ximgproc
[ 53%] Built target opencv_xobjdetect
[ 54%] Built target opencv_face
[ 56%] Built target opencv_datasets
[ 57%] Built target opencv_stitching
[ 58%] Built target opencv_optflow
[ 61%] Built target opencv_tracking
In file included from /home/gorfanidis/Downloads/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:79,
from /home/gorfanidis/Downloads/opencv/modules/videoio/src/cap_ffmpeg.cpp:49:
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:80:6: warning: "LIBAVCODEC_VERSION_INT" is not defined, evaluates to 0 [-Wundef]
80 | #if (LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 51, 100))
| ^~~~~~~~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:270:5: warning: "LIBAVCODEC_VERSION_INT" is not defined, evaluates to 0 [-Wundef]
270 | #if LIBAVCODEC_VERSION_INT>0x000409
| ^~~~~~~~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:277:5: warning: "LIBAVCODEC_VERSION_INT" is not defined, evaluates to 0 [-Wundef]
277 | #if LIBAVCODEC_VERSION_INT>((50<<16)+(1<<8)+0)
| ^~~~~~~~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:286:5: warning: "LIBAVCODEC_VERSION_INT" is not defined, evaluates to 0 [-Wundef]
286 | #if LIBAVCODEC_VERSION_INT>((51<<16)+(11<<8)+0)
| ^~~~~~~~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:295:5: warning: "LIBAVCODEC_VERSION_INT" is not defined, evaluates to 0 [-Wundef]
295 | #if LIBAVCODEC_VERSION_INT>=((51<<16)+(49<<8)+0)
| ^~~~~~~~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
81 | #define AV_CODEC_ID_H264 CODEC_ID_H264
| ^~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:146:7: note: in expansion of macro ‘AV_CODEC_ID_H264’
146 | { AV_CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
| ^~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
81 | #define AV_CODEC_ID_H264 CODEC_ID_H264
| ^~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:147:7: note: in expansion of macro ‘AV_CODEC_ID_H264’
147 | { AV_CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
| ^~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
81 | #define AV_CODEC_ID_H264 CODEC_ID_H264
| ^~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:148:7: note: in expansion of macro ‘AV_CODEC_ID_H264’
148 | { AV_CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
| ^~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
81 | #define AV_CODEC_ID_H264 CODEC_ID_H264
| ^~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:149:7: note: in expansion of macro ‘AV_CODEC_ID_H264’
149 | { AV_CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
| ^~~~~~~~~~~~~~~~
/home/gorfanidis/Downloads/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
81 | #define AV_CODEC_ID_H264 CODEC_ID_H264
...
After that there is large display of similar messages.
So, is there any action I could take to resolve the issue? Do I need to update any path variable for example?