공부/C++

[C++] 우분투24.04 OpenCV(4.11.0) 설치하기

aribae 2025. 1. 15. 08:57

 

 

 

 

 

코딩을 하기 시작하면서 쭉 파이썬만 다루다가, 지난 주 부터 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=OFFOPENCV_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도 그에 맞춰 최신 버전으로 설치해주니 해결되었습니다.

 

본인이 구 버전을 사용하고 있다거나 한다면 맞는 버전을 찾아 설치하시기를 바랍니다 ! 

 

 

 

 


모두 즐거운 코딩 생활이 되시기를 바라며 ... 총총 .... ʚ🧸ྀིɞ