티스토리 뷰
목차
[크로스플랫폼 언어 Qt] Cross 컴파일 6가지 (윈도우 <-> 리눅스)
[크로스 플랫폼 언어 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 프로그래밍 예제]
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 프로그래밍 예제]
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 프로그래밍 예제]
6. QwtTextLabel 에러
크로스 컴파일 과정에서 setPlainText 에러가 발생하니 처음부터 기본 TextLabel을 쓰는것이 좋을 듯 합니다. Label에 초기 텍스트를 설정하면 코드로 변경되며 setPlainText가 호출되지만 현재로선 원인을 알 수 없는 에러가 발생하며 컴파일이 안됩니다.
우분투에선 안되지만 윈도우에선 잘됩니다.
[크로스플랫폼 언어 Qt] Cross 컴파일 6가지 (윈도우 <-> 리눅스)
written by vicddory