본문 바로가기
C++ 200제/코딩 IT 정보

[크로스플랫폼 언어 Qt] Cross 컴파일 6가지 (윈도우 <-> 리눅스)

by vicddory 2017. 2. 23.

[크로스플랫폼 언어 Qt] Cross 컴파일 6가지 (윈도우 <-> 리눅스)


cross compile qt 윈도우[크로스 플랫폼 언어 Qt 프로그래밍 예제]


※ 크로스 컴파일 작업 환경


Windows7 64 bit

  • Visual Studio 2012, Qt Creator 2.5.2
  • Qt msvc 2012, opengl-5.3.2 (x86)


Ubuntu 14.04 32bit

  • Qt Creator 2.5.2
  • gcc 4.8.2


Qt는 크로스 플랫폼 환경에 어울리는 대표적인 개발 언어입니다. 제 경험상 소스 코드 자체가 100% 호환되기에 크로스 플랫폼을 타깃으로 제작되는 프로젝트라면 Qt를 선택하는 것이 좋다고 생각합니다.


저는 윈도우7 64비트 환경과 우분투 14.04 32비트 환경을 오가며 작업했습니다. 다만, 자동으로 크로스 플랫폼 환경을 완벽하게 구현할 수 없기에 몇 가지 수정 사항이 있습니다.




윈도우 리눅스 우분투 Qt 크로스 컴파일[크로스 플랫폼 언어 Qt 프로그래밍 예제]


1. project.pro


1
DEFINES += WIN64 // 삭제
cs


위와 같이 프로젝트가 Windows 64비트 기반이라는 사항을 삭제해야 합니다.


그렇지 않으면 아래 코드가 수행되며 크로스 컴파일 단계에서 에러가 발생합니다.


1
2
3
4
5
6
qt_windows.h
 
#ifndef NOMINMAX
#  define NOMINMAX
#endif
#include <windows.h>
cs


2. 라이브러리 추가


1
2
3
#include <qframe.h> 
#include <QGLWidget> 등 opengl 라이브러리
#include <QTcpServer>
cs


위와 유사하거나 똑같은 헤더 파일을 사용한다면 아래처럼 추가합니다.


1
QT += widgets opengl network
cs

3. namespace 추가 (크로스 컴파일 선택 사항)

헤더 파일에 UI용 namespace를 생략할 경우가 있는데 윈도우에서는 알아서 잡아주지만 우분투에선 코드를 넣어줘야 합니다.


1
2
3
namespace Ui {
    class ui_dlg_config_;
}
cs


4. C++11 문법

a. queue<shared_ptr<T>> freelist_;


should be '> >' within a nested template argument list 에러 발생 시


1
CONFIG += c++11
cs


크로스 컴파일 Qt 플랫폼[크로스 플랫폼 언어 Qt 프로그래밍 예제]


b. using std::shared_ptr;


'std::shared_ptr' has not been declared 에러 발생 시 아래처럼 (gcc 4.8.2 기준)


1
using std::tr1::shared_ptr;
cs


5. 크로스 컴파일 경로 설정

윈도우와 우분투의 컴파일 관련 경로가 다르기에 초기엔 설정해줘야 합니다. (Qt Creator의 왼쪽 메뉴 중 Projects에서 설정)

윈도우에서의 개발 환경과 맞춰주는 편이 좋습니다..?



[크로스 플랫폼 Qt] Cross 컴파일 방법 6가지 (윈도우 - 리눅스)[크로스 플랫폼 언어 Qt 프로그래밍 예제]


6. QwtTextLabel 에러

크로스 컴파일 과정에서 setPlainText 에러가 발생하니 처음부터 기본 TextLabel을 쓰는것이 좋을 듯 합니다. Label에 초기 텍스트를 설정하면 코드로 변경되며 setPlainText가 호출되지만 현재로선 원인을 알 수 없는 에러가 발생하며 컴파일이 안됩니다.


우분투에선 안되지만 윈도우에선 잘됩니다.


 [크로스플랫폼 언어 Qt] Cross 컴파일 6가지 (윈도우 <-> 리눅스)

written by vicddory

댓글