이 글을 작성하기까지.. 온갖 고난속에 많은 시간이 갈려나갔다. 그 이유는 독자도 경험했을지 모를 에러에 있다. 필자가 경험한 에러는 이러하다.

 

mingw_32 빌드 도중 30~40%에서 cxx 관련 에러후 실패!

qt와 OpenCV의 연동과 관련된 키워드를 구글링하면 최다조회로 mingw와 CMake를 이용한 빌드가 검색된다.

해당 게시물들을 통해 연동에 성공했으면 얼마나 좋았을까! 필자는 makefile 생성후 mingw_32로 빌드하는 과정에서 30~40% 즈음에 cxx와 관련된 원인모를 에러를 만나 좌절할수 밖에 없었다. 이에대해 makefile을 생성할때 옵션 몇개를 변경하는 방안을 제시한 블로그도 있지만 한결같은 결과만 볼수 있을 뿐이었다...

 

이외에도 여러가지 시도와 에러를 반복했지만 생략하고 고심끝에 찾아낸 연동방법을 소개하겠다.

 

OpenCV 홈페이지 : https://opencv.org/releases/

 

Releases

 

opencv.org

OpenCV 공식 홈페이지에서는 msvc15 버전으로 빌드된 파일들을 지원하기 때문에 visual studio의 경우 해당 파일을 다운받아 압축풀고 프로젝트 설정만 해주면 사용이 가능하다.

그리고 Qt Creator에서는 vs의 컴파일러를 통한 빌드를 지원한다! 즉 mingw 컴파일러를 통한 빌드가 안된다면 이미 빌드되어 올라온 msvc15 파일을 이용하면 된다. 

 

참고 : Using OpenCV with gcc and CMake — OpenCV 3.0.0-dev documentation

 

Using OpenCV with gcc and CMake — OpenCV 3.0.0-dev documentation

Result By now you should have an executable (called DisplayImage in this case). You just have to run it giving an image location as an argument, i.e.: You should get a nice window as the one shown below:

docs.opencv.org

 

1. OpenCV 홈페이지에서 빌드된 파일을 받아 압축을 푼다.

2. {압축푼 폴더}\build\x64\vc15\bin 를 환경변수에 추가한다.

3. QTCreator에서 CMakeLists.txt를 다음과 같이 수정한다.

cmake_minimum_required(VERSION 3.5) 
project(ProjectName LANGUAGES CXX) 
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON) 
set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV REQUIRED) #추가

find_package(Qt5 COMPONENTS Widgets REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS}) #추가
add_executable(FID main.cpp mainwindow.cpp mainwindow.h mainwindow.ui ) 
target_link_libraries(ProjectName PRIVATE Qt5::Widgets ${OpenCV_LIBS}) #변경

위와 같이 수정후 저장하면 CMake가 모듈에 OpenCV 라이브러리를 끌어온다.

 

해당 문제는 결국 CMake를 이번에 처음 이용해봤다는점과 각종 개발툴이 자동으로 갖춰준 빌드도구에 길들여져 빌드에 대한 이해를 게을리한 결과인듯 싶다.

이참에 visual studio code를 들여야겠다는게 필자의 반성이다.

 

'공부 > Qt' 카테고리의 다른 글

Configuration failed 에러  (0) 2019.10.19
Qt 단축키  (0) 2019.07.17
Qt 란?  (0) 2019.07.17

C++ 언어로 작성된 프로그램이 컴파일하고 빌드하는 과정은 4단계로 나뉜다.

 

1. 전처리 단계

매크로 프로세서 라고 불리는 전처리기에 의해 이루어지며

* C언어로 작성된 소스를 문법적으로 검토하고

* 주석으로 되어있는 문장을 제거하며

* 키워드로 명시된 필요한 파일들을 읽고 실제 컴파일이 가능한 소스로 변환한다.

 

2. 컴파일 단계

컴파일러로 프로그램 소스를 어셈블리 코드로 만든다.

* 어셈블리 코드는 실행이 가능한 바이너리 코드로 만들기 전 기계어라고 불리는 가장 낮은 단계의 소스코드이다. 

 

3. 어셈블링 단계

어셈블리 코드가 어셈블러에 의해 실행 가능한 프로그램 파일의 중간단계 격인 오브젝트 코드로 변환된다.

* 오브젝트 코드는 링크 과정에 필요한 정보들을 갖고있다.

 

4. 링크 단계

링커가 오브젝트 코드와 C 또는 C++ 표준 라이브러리를 사용하여 실행 가능한 프로그램을 만든다.

 

이렇게 생성된 프로그램은

* 리눅스의 경우 커널의 로더(프로그램 실행 기능)가 요구하는 ELF(Executable and Linking Format) 포맷으로 저장된다.

* 윈도우의 경우 COFF(Common Object-File Format) 포맷으로 저장된다.

 

g++ 로 컴파일을 수행할 경우

default 옵션으로 -std=c++98 로 컴파일된다. (std는 사용하는 버전 옵션을 나타낸다.)

버전을 지정하려면 -ansi 나 -std=c++ 에 버전 번호를 덧붙여 추가로 입력해주어야 한다.

 

+ Recent posts