반응형

MinGW 용으로 OpenCV 4.5.1을 빌드하고 Visual Studio Code에서 OpenCV 코드를 컴파일하는 방법을 다룹니다. 



2021. 4. 21  최초작성




1. 아래 링크에서 x86_64-posix-seh를 다운로드하여 설치합니다. 

 

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

 



2. mingw64 폴더를 C:\에 복사해주고 시스템 변수 path에 C:\mingw64\bin를 추가합니다. 




3. 명령 프롬프트에서 gcc를 실행시켜 봅니다.

 

C:\Users\jjlee>gcc -v

Using built-in specs.

COLLECT_GCC=gcc

COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe

Target: x86_64-w64-mingw32

Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '

Thread model: posix

gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

 



4. 다음 두 링크에서 OpenCV 4.5.1와 OpenCV Contrib 4.5.1 다운로드합니다. 

 

https://github.com/opencv/opencv/releases

 

https://github.com/opencv/opencv_contrib/releases




OpenCV 4.5.2에서 빌드시 다음 에러나서 OpenCV 버전을 4.5.1로  변경했습니다.

 

C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x63): undefined reference to `__imp_GetACP'

collect2.exe: error: ld returned 1 exit status

mingw32-make[2]: *** [modules\world\CMakeFiles\opencv_world.dir\build.make:16054: bin/libopencv_world452.dll] Error 1

mingw32-make[1]: *** [CMakeFiles\Makefile2:3237: modules/world/CMakeFiles/opencv_world.dir/all] Error 2

mingw32-make: *** [Makefile:165: all] Error 2




5. C:\opencv_sources 폴더에 다운로드 받은 압축파일을 풀어줍니다. 

 

압축을 푸는 방식에 따라 opencv-4.5.1, opencv_contrib-4.5.1 안에 같은 이름의 폴더가 또 있을 수 있으니 주의하세요. 

 




6. 아래 링크에서 CMake ( cmake-3.20.1-windows-x86_64.msi )를 다운로드 받아 설치합니다. 

 

https://cmake.org/download/



설치시 “Add CMake to the system PATH for all users”를 체크해야 합니다. 

 



 

7. 명령 프롬프트에서 C:\opencv_sources\opencv-4.5.1로 이동한 후, build 폴더를 생성하고 build 폴더로 이동한 후에 다음 명령을 실행합니다.  

마지막에 .. 을 빼먹지 마세요. 

 

cmake  -G "MinGW Makefiles" -DCMAKE_CXX_COMPILER=g++.exe -DCMAKE_MAKE_PROGRAM=mingw32-make.exe -DCMAKE_BUILD_TYPE=Release ^

-DOPENCV_EXTRA_MODULES_PATH="C:/opencv_sources/opencv_contrib-4.5.1/modules" -DCMAKE_INSTALL_PREFIX="C:/opencv-4.5.1/build" ^

-DINSTALL_TESTS=ON -DINSTALL_C_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF -DBUILD_opencv_world=ON ^

-DWITH_OPENGL=OFF -DWITH_MFX=OFF -DBUILD_PACKAGE=OFF -DWITH_MATLAB=OFF -DBUILD_PREF_TESTS=OFF -DBUILD_TESTS=OFF ^

-DBUILD_opencv_python3=OFF -DBUILD_opencv_python2=OFF -DOPENCV_SKIP_PYTHON_LOADER=ON ^

-DBUILD_JAVA=OFF -DWITH_LAPACK=OFF -DWITH_VTK=OFF -DWITH_1394=OFF -DWITH_GSTREAMER=OFF ^

-DWITH_TBB=OFF -DWITH_EIGN=OFF -DMKL_WITH_TBB=OFF -DBUILD_WITH_STATIC_CRT=OFF ^

-DOPENCV_ENABLE_NONFREE=ON -DBUILD_opencv_rgbd=OFF ..




참고로 CUDA를 포함시키려고 해봤는데 다음과 같은 에러가 났습니다.   



--  compilation is disabled (due to only Visual Studio compiler supported on your platform).

CMake Warning at cmake/OpenCVFindLibsPerf.cmake:45 (message):

  OpenCV is not able to find/configure CUDA SDK (required by WITH_CUDA).

 

  CUDA support will be disabled in OpenCV build.

 

  To eliminate this warning remove WITH_CUDA=ON CMake configuration option.

 

Call Stack (most recent call first):

  CMakeLists.txt:712 (include)




관련 CMake 파일을 찾아보니 아래처럼 윈도우에선 무조건 비주얼스튜디오 사용하게 되어있습니다.

 

if((WIN32 AND NOT MSVC) OR OPENCV_CMAKE_FORCE_CUDA)

  message(STATUS "CUDA compilation is disabled (due to only Visual Studio compiler supported on your platform).")

  return()

endif()




8. 빌드합니다.  코어 개수 만큼 -j 뒤에 숫자를 붙여준다. 

 

mingw32-make -j4



9. 지정한 위치 C:\opencv-4.5.1\build 로 빌드 결과물 복사합니다. 

 

mingw32-make install




10. Visual Studio Code에서 OpenCV 코드 빌드하는 방법은 다음 포스트를 참고하세요. 

 

Visual Studio Code에서 CMake, MinGW를 사용하여 OpenCV 코드 컴파일 하는 방법

https://webnautes.tistory.com/1443 

 

반응형

해본 것을 문서화하여 기록합니다.
부족함이 있지만 도움이 되었으면 합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    Favicon of https://1986hz.tistory.com BlogIcon 1986hz

    저자님 안녕하세요. 저자님의 파이썬과 c++ 예제로 마스터하는 OpenCV 프로그래밍 책을 구매하고 VSCode로 C++을 사용하려고 검색해보니 저자님 블로그에 해당 내용이 있네요!

    근데, 저자님이 알려준대로 build를 진행했는데, 아래와 같이 에러가 발생하였습니다.
    아나콘다에 있는 libhdf5.lib가 문제일까요?? anaconda python3.8.5 64bit입니다.
    gcc와 cmake를 처음 사용하는 거라서 구글링을 열심히 해보아도 제 지식으로는 해결할 수가 없어서 문의드려봅니다.
    감사합니다.


    [ 84%] Linking CXX shared library ..\..\bin\libopencv_world451.dll
    Warning: corrupt .drectve at end of def file
    C:/Users/1986h/anaconda3/Library/lib/libhdf5.lib(CMakeFiles/hdf5-static.dir/H5Ztrans.c.obj):(.text$mn+0x3026): undefined reference to `__isa_available'
    C:/Users/1986h/anaconda3/Library/lib/libhdf5.lib(CMakeFiles/hdf5-static.dir/H5Ztrans.c.obj):(.text$mn+0x3355): undefined reference to `__isa_available'
    .....
    collect2.exe: error: ld returned 1 exit status
    mingw32-make[2]: *** [modules\world\CMakeFiles\opencv_world.dir\build.make:14968: bin/libopencv_world451.dll] Error 1
    mingw32-make[1]: *** [CMakeFiles\Makefile2:3202: modules/world/CMakeFiles/opencv_world.dir/all] Error 2
    mingw32-make: *** [Makefile:165: all] Error 2

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.05.20 12:28 신고

      일반 파이썬으로 해보세요. 아나콘다의 경우 문제가 생기는 경우가 있더라구요

  2. thumbnail
    Favicon of https://1986hz.tistory.com BlogIcon 1986hz

    초보라서 한번더 질문합니다 ㅜㅜ

    현재 아나콘다에 설치된 pip 재설치가 힘들어서
    일반 파이썬 설치해서 build 하려고 합니다.

    그러면 cmake가 일반 파이썬을 인식할 수 있도록 하려면 어떻게 해야 할까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.05.20 13:00 신고

      파이썬 위치를 지정해 줄수 있습니다. 리눅스 기반에서 하는 방법이 아래 링크에 있습니다

      https://webnautes.tistory.com/1433