[C++] 우분투24.04 OpenCV(4.11.0) 설치하기
코딩을 하기 시작하면서 쭉 파이썬만 다루다가, 지난 주 부터 C++에 입문하게 되었습니다.
노비들은 하라면 해야해서 어쩔 수 없죠 ꒰⑅◡̎ ꒱𓈒𓏸
요즘 웬만한 코드는 GPT로 구현이 가능하기 때문에 쉽게(?) 생각하고 시작했었는데요..
막상 코드를 실행해보니 에러의 연속 + 기본적인 #include 같은것들도 빨간줄이 좍좍 그어지는 비극을 맞이했습니다. 따흑
그래서 기본적으로 필요한 것들을 하나하나 설치 한 뒤 제대로 실행해보자! 하여
Cudunn, TensorRT 등등 깨작깨작 설치하던 중 만 하루가 넘게 머리를 싸매도 설치가 되지 않았던 ..!
OpenCV를 설치한 과정을 정리해보았습니다.
(나머지도 시간이 된다면 ~? 포스팅 해보겠습니다.)
저 말고도 고생하고 계신 분들이 있다면,, 에러코드 따라 하나하나 수정하려 하지 마시고 처음부터 싹 정리하고 진행하시는 걸 추천드립니다.
설치 과정을 잘 정리해둔 포스팅들 참 많았지만 저는 아래 두 블로그 글을 참고하여 설치하였습니다.
저의 (구)스승님과, 블로거님께 감사드립니다. ㅎㅎ
https://darkpgmr.tistory.com/184
OpenCV + CUDA 직접 빌드하기 (Windows/Linux 종합)
최근에 opencv에 있는 dnn을 한번 써보려고 직접 소스를 받아서 빌드(build)해 보았다. 역시나 엄청난 삽질의 연속이고 할 때마다 이것 저것 해결책을 검색하느라 많은 시간을 소모한다 (삽질은 누구
darkpgmr.tistory.com
https://velog.io/@parcdaxb1n/C-OpenCV-4.5.5-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-Ubuntu-20.04
[C++] OpenCV 4.5.5 설치하기 (Ubuntu 20.04) - (1) 성공기
🐻 Opening 개발을 할 때 모든 스텝의 가장 처음은 환경구축 ! 골머리 썩었던 것들은 늘 적어둬야지 하면서도 늘 미루고 까먹고 .., 인간의 실수는 끝이 없고 똑같은 어쩌구 😅 아무튼 어떤 것부터
velog.io
개발환경
- Ubuntu 24.04
- NVIDIA GeForce RTX 4090
- Driver Version: 560.35.03
- CUDA Version: 12.6 (toolkit 동일)
- Python Version: 3.12.3
설치과정
1. CUDA 설치
sudo apt update
sudo apt install cuda-drivers
sudo reboot # 필수!
cuda toolkit, cudnn도 설치해주도록 합니다.
포스팅에서는 생략하도록 하겠습니다.
2. Opencv 설치 확인 및 제거
pkg-config --modversion opencv4
# pkg-config --modversion opencv
# 4.11.0
설치가 되어있다면 아래 4.11.0 처럼 버전이 출력됩니다.
새로 설치하는 상황이라면 충돌을 막기 위해 기존 설치된 것을 지우고 진행합니다.
sudo apt purge libopencv* python-opencv
sudo apt autoremove
no package found가 출력된다면 그대로 진행합니다.
3. 패키지 설치 (지옥)
사실 뭐가 앞으로 필요할지는 잘 알 수 없지만..
알고있다면 본인의 개발 환경에 맞춰 설치하도록 합니다.
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
sudo apt-get install libv4l-dev v4l-utils
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
sudo apt-get install python3-dev python3-numpy
3.1 trouble shooting
빌드 하는 것도 아닌데 설치 과정에서 오류들이 많이 나왔습니다.
2.0을 깔아야한다고 한다면 4.0 6.0 이런식으로 바꾸다보면 설치가 되긴 하더라구요..
저는 얼레벌레 깔리는걸로 깔고 넘어갔습니다.
3.1.1 libgtkgl2.0-dev 설치 오류
libgtkgl2.0-dev 설치 과정에서 발생한 오류입니다.
이건 버전 숫자를 바꿔가면서 해봐도 설치가 안되었습니다. 아래는 에러 메세지입니다.
sudo apt install libgtkgl2.0-dev
# Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package libgtkgl2.0-dev E: Couldn't find any package by glob 'libgtkgl2.0-dev'
설치할 수 있는 gtkgl 패키지가 있기는 한건지 !? 확인을 해봅니다.
apt-cache search gtkgl
# libgtkglext1 - OpenGL Extension to GTK+ (shared libraries)
# libgtkglext1-dev - OpenGL Extension to GTK+ (development files)
# libgtkglext1-doc - OpenGL Extension to GTK+ (documentation)
# liblablgl-ocaml - Runtime libraries for lablgl
# liblablgl-ocaml-dev - OpenGL interface for Objective Caml
없네요.. 다른분들 어떻게 까신건쥐 .....
검색해보니 대체 패키지가 있다고 하여
대체 패키지를 설치해주었습니다.
sudo apt update
sudo apt install libgtk-3-dev libgl1-mesa-dev
4. OpenCV 설치
버전을 지정해서 다운받으시는 분들도 많던데,
상위 버전은 웬만하면 호환이 되니 최신 버전에 맞춰 다운로드 해주었습니다.
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
opencv 폴더로 이동하여 설치를 진행합니다.
cd ./opencv
mkdir build
cd build
이제 아래 명령어를 입력하여 컴파일 설정을 진행합니다.
여기서 주의할 점은,
CUDA_TOOLKIT_ROOT_DIR, OPENCV_EXTRA_MODULES_PATH, CUDA_ARCH_BIN CUDA_ARCH_PTX, CUDNN*
위 내용들을 본인이 사용하고 있는 버전, 폴더 경로로 바꾸어주셔야 합니다.
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D BUILD_PACKAGE=OFF -D BUILD_EXAMPLES=OFF -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.6 -D WITH_CUDA=ON -D WITH_CUBLAS=ON -D WITH_CUFFT=ON -D WITH_NVCUVID=ON -D WITH_IPP=OFF -D WITH_V4L=OFF -D WITH_LIBV4L=ON -D WITH_1394=OFF -D WITH_GTK=ON -D WITH_QT=OFF -D WITH_OPENGL=OFF -D WITH_EIGEN=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D BUILD_JAVA=OFF -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LOADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=8.9 -D CUDA_ARCH_PTX=8.9 -D CUDNN_LIBRARY=/usr/local/cuda-12.6/lib64/libcudnn.so.9.6.0 -D CUDNN_INCLUDE_DIR=/usr/local/cuda-12.6/include -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.12/dist-packages -D OpenCV_DIR=/path/to/opencv/opencv ..
저는 이 것도 한 번에 성공하지는 못했는데, 어떻게 해결했는지는 아래 후술하도록 하겠습니다.
성공한다면 아래와 같은 메세지를 볼 수 있습니다. ( *˙˙*)
여기까지 성공하셨다면 ~!
컴파일 진행해주어요 ✧⁺⸜(●′▾‵●)⸝⁺✧
아래 명령어를 통해 cpu 코어수를 확인하고 그에 맞게 숫자를 변경해주세요.
저는 24여서 -j24를 입력했고, -j8 -j16 등등 맞게 써주시면 됩니다.
# cpu 코어 수 확인
cat /proc/cpuinfo | grep processor | wc -l
make -j24
최종 설치를 진행합니다.
sudo make install
설치 확인
pkg-config --modversion opencv4
# pkg-config --modversion opencv
# 4.11.0

완료!
+ 사실 막상 설치하고 사용하려니 또 안되는 것이 많아서... 현재로써는 사용하고 있지는 않습니다.
왜 일주일동안 고생한건지 !?!?!? 그래도 포스팅으로 남기는 중이니 많은 분들께 도움이 되었으면 좋겠어요 흑흑
4.1 trouble shooting
설치 과정에서 에러가 발생한다면 아래 명령어를 통해 빌드가 되다 만 파일들을 다 삭제해주고 다시 진행해주셔야 합니다.
rm -rf build/ # -rf: 폴더와 폴더 내 모든 파일 삭제
mkdir build
cd build
4.1.1 cuda, cudnn 찾을 수 없어 발생한 에러
에러 메세지
-- Found Threads: TRUE
CMake Error at cmake/FindCUDNN.cmake:71 (file):
file failed to open for reading (No such file or directory):
/usr/local/cuda-12.6/include/cudnn.h
Call Stack (most recent call first):
cmake/OpenCVUtils.cmake:144 (find_package)
cmake/OpenCVDetectCUDA.cmake:48 (find_host_package)
cmake/OpenCVFindLibsPerf.cmake:43 (include)
CMakeLists.txt:732 (include)
해결 방법
저기서 필요로 하는 파일들의 경로를 바꿔줍니다.
흩뿌려져있던 소스파일들을 쿠다 폴더 안에 넣어주어요.....
sudo cp /usr/lib/x86_64-linux-gnu/libcudnn* /usr/local/cuda-12.6/lib64/
sudo cp /usr/include/cudnn*.h /usr/local/cuda-12.6/include/
파일 어디있는지 모르겠다면 아래 명령어를 사용합니다.
find / -name '*cudnn*'
# 루트 경로에서 cudnn이 포함된 모든 파일 경로를 출력
4.1.2 cuDNN이 필요하다는 에러 메세지
에러 메세지
CMake Error at modules/dnn/CMakeLists.txt:41 (message):
DNN: CUDA backend requires cuDNN. Please resolve dependency or disable
OPENCV_DNN_CUDA=OFF
해결 방법
컴파일 설정 중 OPENCV_DNN_CUDA=OFF를 OPENCV_DNN_CUDA=ON 으로 바꿔줍니다.
+ 이렇게 하고 설치했는데도 코드 돌릴 때 gpu 사용 안된다고 했었어요 저는 ... *
4.1.3 opencv 버전 호환 불가로 인한 에러
에러 메세지
3 errors detected in the compilation of "/home/hjh/opencv/opencv-4.5.5/modules/core/src/cuda/gpu_mat.cu".
CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.RELEASE.cmake:282 (message):
Error generating file
/home/hjh/opencv/opencv-4.5.5/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/build.make:77: modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/home/hjh/opencv/opencv_contrib-4.5.5/modules/cudev/include/opencv2/cudev/ptr2d/texture.hpp(61): error: texture is not a template
typedef texture<T, 0x02, cudaReadModeElementType> TexRef;
^
/home/hjh/opencv/opencv_contrib-4.5.5/modules/cudev/include/opencv2/cudev/ptr2d/texture.hpp(83): error: identifier "cudaUnbindTexture" is undefined
cudaUnbindTexture(ref);
^
2 errors detected in the compilation of "/home/hjh/opencv/opencv-4.5.5/modules/core/src/cuda/gpu_mat_nd.cu".
CMake Error at cuda_compile_1_generated_gpu_mat_nd.cu.o.RELEASE.cmake:282 (message):
Error generating file
/home/hjh/opencv/opencv-4.5.5/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat_nd.cu.o
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/build.make:84: modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat_nd.cu.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:3763: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
해결 방법
이 문제는 넣을까 말까 했지만 정리해둔김에 추가했습니다.
처음에는 앞서 언급한 블로거님의 글대로 4.5 버전을 다운받아 설치를 했는데,
제 환경과 호환이 안되는 버전이어서 발생한 오류였습니다.
드라이버 등등 다 최신버전으로 설치되어있다보니 opencv도 그에 맞춰 최신 버전으로 설치해주니 해결되었습니다.
본인이 구 버전을 사용하고 있다거나 한다면 맞는 버전을 찾아 설치하시기를 바랍니다 !
모두 즐거운 코딩 생활이 되시기를 바라며 ... 총총 .... ʚ🧸ྀིɞ