티스토리 뷰



하나의 C/C++프로그램으로 리눅스 뿐만아니라 맥과 윈도우에서도 구동하는 크로스 플랫폼 응용을 개발하려는 경우 많은 경우 검토 대상으로 등장하는 것이 자바 RCP와 같은 자바 기반 응용이나 GTK+, QT 기반의 응용 인데 이번에는 QT 기반의 C/C++ 응용을 윈도우에서 빌드하는 과정을 통해서 QT 응용의 윈도우 포팅을 위한 성공 사례를 확인할까 합니다. 



이번 포스팅의 목표가 되는 프로젝트는 BibleTime이란 프로젝트로 잡았습니다. 리눅스에서 빌드한다면 yum이나 apt-get으로 연관 패키지를 간편하게 설치하여 손쉽게 빌드하겠지만 윈도우 빌드이니 만큼 빌드 환경을 갖추는 것이 그리 녹록하지는 않습니다. 그렇지만 일단 개발 환경이 갖추어지면 그 다음 부터는 응용 개발에 집중할 수 있으니 개발 환경 구축이 큰 부담이라고 할 수는 없을 것 같습니다. 윈도우 포팅 과정을 그래도 어렵지 않게 할 수 있는 것은 CMake라는 도구 덕택이 아닌가 싶습니다.


- 작업 폴더 생성 

    C:\bt

    연관 패키지와 소스를 빌드할 루트 폴더입니다.


- Microsoft Visual Studio Express 2012 for Windows Desktop 설치

    VS2012가 Windows7 이상에서만 수행되므로 XP이하 사양에서는 작업 불가입니다.

    https://www.microsoft.com/ko-kr/download/details.aspx?id=34673     

    VS2012_WDX_KOR.iso 를 가상 CD로 마운트해서 설치를 진행 합니다.(wdexpress_full.exe을 실행합니다) 

    배포 버전은 Update5 버전으로 "개인-공중배포 목적"으로 온라인등록하여 제품코드 받아 등록 합니다.


Visual C++ 2012 Redistributable Package 설치

    https://www.microsoft.com/ko-kr/download/confirmation.aspx?id=30679

    C:\bt\vcredist_x86.exe에 복사

    

ISO C9x compliant 헤더 파일 설치

    https://code.google.com/archive/p/msinttypes/downloads

    msinttypes-r26.zip 압축을 풀어서 inttypes.h를 VS2012 설치 폴더 Microsoft Visual Studio 11.0\VC\include 에 복사

    

- CMake 설치

    https://cmake.org/download/

    cmake-3.6.1-win32-x86.msi "Add CMake to the system PATH for all users" 선택으로 설치

    (이전버전이 있다면 삭제하고 설치해야 합니다)


- Qt for Visual Studio 2012 설치

    https://download.qt.io/official_releases/qt/5.2/5.2.0/qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe

    (다운로드시 오픈소스 및 GPL3 라이선스에 동의해야함)

    qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe 설치후 QT Creater등을 실행할 필요는 없습니다.

    

- NSIS 설치

    https://sourceforge.net/projects/nsis/files/NSIS%202/2.51/nsis-2.51-setup.exe/download

    nsis-2.51-setup.exe 를 설치합니다. 설치 프로그램을 생성해주는 오픈소스 프로그램입니다.

    

- Git 및 7zip 설치

    소스 체크 아웃 및 설치 프로그램 생성시 사용할 압축 프로그램으로 설치는 아래 링크를 참조하세요.

    "기업에서도 사용할 수 있는 압축 프로그램 7-Zip"

    "윈도우에서 깃(git) 설치하기"


- pkg-config 설치    

    https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip/download

    pkg-config-lite-0.28-1_bin-win32.zip을 C:\bt\pkg-config-lite-0.28-1에 압축 해제

    제어판>시스템>고급시스템설정>환경변수에서 

        PATH에 C:\bt\pkg-config-lite-0.28-1\bin추가

        PKG_CONFIG_PATH를 C:\bt 로 추가

        

- zlib 빌드

    소스 다운로드 : http://zlib.net/zlib128.zip

    C:\bt\zlib에 압축해제

    CMake(cmake-gui) 실행

        Source/Build 디렉토리를 C:\bt\zlib 로 설정

        Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기

        Configure 를 눌러 환경 설정을 새로 고침

        Generate 클릭하여 솔루션 생성

    Visual Studio 2012에서 c:\bt\zlib\zlib.sln 열기

        zlibstatic > 속성에서

            구성을 모든구성으로 선택

            구성 속성>일반>프로젝트 기본값 섹션의 문자 집합을 유니코드 문자집합 사용으로 선택으로 적용 및 확인

        툴바>솔루션구성>Release로 선택후 zlibstatic 컨텍스트메뉴>빌드 수행  (C:\bt\zlib\Release\zlibstatic.lib 생성됨)

        파일>솔루션 닫기


- Curl 빌드하기

    소스 다운로드 : https://curl.haxx.se/download/curl-7.50.1.zip

    C:\bt\curl 에 압축해제

    CMake(cmake-gui) 실행

        Source/Build 디렉토리를 C:\bt\curl 로 설정

        Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(오류메시지 무시)

        BUILD_CURL_EXE, BUILD_CURL_TESTS 옵션의 체크 박스 해제

        Configure 를 눌러 설정을 새로 고침

        Generate 클릭하여 솔루션 생성

    Visual Studio 2012에서 c:/bt/curl/CURL.sln 열기

        libcurl>속성>구성속성>일반에서 

            프로젝트 기본값 섹션의 문자 집합을 유니코드 문자집합 사용으로 선택으로 적용 및 확인

        툴바>솔루션구성>Release로 선택후 libcurl 컨텍스트메뉴>빌드 수행(경고 무시)

        파일>솔루션 닫기


- ICU 빌드하기

    소스 다운로드 : http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.zip

    (Qt에서도 ICU를 배포하는데 버전이 같지 않으면 용량큰 ICU 라이브러리를 이중으로 배포해야 합니다)

    C:\bt\icu 에 압축해제

    Visual Studio 2012에서 C:\bt\icu\source\allinone\allinone.sln 열기(버전차이 경고시 업그레이드 수행)

        툴바>솔루션구성>Release로 선택후 솔루션 컨텍스트메뉴>빌드 수행(경고 무시)

        파일>솔루션 닫기


- BZIP2 빌드하기

    소스 다운로드 : http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

    C:\bt\bzip2 에 압축해제

    Visual Studio 2010 Pro에서 C:\bt\bzip2\libbz2.dsp 파일 열기로 시스템 업그레이드

    Visual Studio 2012를 열고 C:\bt\bzip2\libbz2.sln 열기(버전차이 경고시 업그레이드 수행)

        툴바>솔루션구성>Release로 선택후 솔루션 컨텍스트메뉴>빌드 수행(경고 무시)

        파일>솔루션 닫기

        

- liblzma 설치

    다운로드 : http://tukaani.org/xz/xz-5.2.1-windows.zip

    C:\bt\xz 에 압축해제(Pre-built 버전으로 소스 빌드는 없습니다)

    비주얼스튜디오 콘솔에서("비주얼스튜디오용 콘솔 만들기" 참조)

        cd C:\bt\xz

        lib /def:doc/liblzma.def /out:bin_i686/liblzma.lib /machine:x86


- boost 다운로드

    다운로드 : https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.zip/download

    C:\bt\boost 에 압축해제. 대표적인 C++ 라이브러리로 Clucene빌드 과정에 참조합니다.

    

    

- Clucene 빌드하기

    소스 다운로드 : https://sourceforge.net/projects/clucene/files/clucene-core-unstable/2.3/clucene-core-2.3.3.4.tar.gz/download

    C:\bt\clucene-core에 압축해제

    CMake(cmake-gui) 실행

        Source/Build 디렉토리를 C:\bt\clucene-core 로 설정

        Entry 항목을 확인해서 아래와 같이 설정 및 추가(상단의 Grouped 및 Advanced 옵션 체크후 작업)

            ZLIB_INCLUDE_DIR:PATH=C:\bt\zlib

            ZLIB_LIBRARY:FILEPATH=C:\bt\zlib\Release\zlibstatic.lib

            Boost_DIR:PATH=C:\bt\boost

            Boost_INCLUDE_DIR:PATH=C:\bt\boost\boost

        Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(경고 무시)

        Configure 를 눌러 설정을 새로 고침

        Generate 클릭하여 솔루션 생성(경고 무시)

    Visual Studio 2012에서 c:\bt\clucene-core\clucene.sln 열기

        툴바>솔루션구성>Release로 선택후 ALL_BUILD 컨텍스트메뉴>빌드 수행(경고 무시)

        파일>솔루션 닫기

        

- libsword 빌드하기

    소스 다운로드 : ftp://ftp.crosswire.org/pub/sword/source/v1.7/sword-1.7.4.tar.gz

    C:\bt\sword 에 압축해제

    Visual Studio 2012에서 C:\bt\sword\lib\vcppmake\libsword.sln을 열고 

         속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경

         속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경, 

                    curl의 라이브러리 경로(curl\lib\Release) 변경, libcurl_a.lib->libcurl_imp.lib

         툴바>솔루션구성>Release로 선택후 빌드하면 C:\bt\sword\lib\vcppmake\Release에 libsword.lib, *.dll 생성


    Visual Studio 2012에서 C:\bt\sword\utilities\vcppmake\utilities.sln 열기

        아래 과정이 개별 프로젝트에 대해서 모두 적용되어야 하므로 전체 선택후 작업

        속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경

        속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경, 

                    curl의 라이브러리 경로(curl\lib\Release) 변경, libcurl_a.lib->libcurl_imp.lib

        툴바>솔루션구성>Release로 선택후 빌드


- BibleTime 빌드

    소스 체크 아웃 : git clone https://github.com/bibletime/bibletime.git

    C:\bt\bibletime 에 깃 복제하기를 수행하고 갈아타기/체크아웃으로 branch 2.10.1로 변경(최종 릴리즈 버전)

    libsword에 대한 패키지 정보 파일 생성 : C:\bt\sword.pc을 생성하여 아래의 내용을 저장합니다.

        prefix=C:/bt 

        exec_prefix=${prefix} 

        libdir=${prefix}/sword/lib/vcppmake/Release

        includedir=${prefix}/sword/include 

        curllib=${prefix}/curl/lib/Release/libcurl_imp 

        zliblib=${prefix}/zlib/Release/zlibstatic


        Name: SWORD 

        Description: Biblical Text Research Engine! 

        Version: 1.7.4

        Libs: ${libdir}/libsword.lib ${curllib}.lib ${zliblib}.lib 

        Libs.private: -L${libdir} -L${curllib} 

        Cflags: -I${includedir}


    CMake(cmake-gui) 실행

        Source 디렉토리를 C:\bt\bibletime 로 설정

        Build 디렉토리를 C:\bt\bibletime-release 로 설정

        Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(디렉토리 생성에 Yes, 오류메시지 무시)

        Entry 항목을 확인해서 아래와 같이 설정 및 추가(상단의 Grouped 및 Advanced 옵션 체크후 작업)

            CMAKE_BUILD_TYPE : Release

            CMAKE_INSTALL_PREFIX : C:\bt\bibletime-release\install

            CMAKE_PREFIX_PATH:PATH=F:\Qt\Qt5.2.0\5.2.0\msvc2012

            MSVC_REDIST : c:\bt\vcredist_x86.exe

            CLucene_INCLUDE_DIR:PATH=C:/bt/clucene-core/src/core 

            CLucene_LIBRARY:FILEPATH=C:/bt/clucene-core/bin/Release/clucene-core.lib 

            CLucene_SHARED_LIB:FILEPATH=C:/bt/clucene-core/bin/Release/clucene-shared.lib 

            CLucene_LIBRARY_DIR:PATH=C:/bt/clucene-core/src/shared 

            CURL_INCLUDE_DIR:PATH=C:/bt/curl/include 

            CURL_LIBRARY:FILEPATH=C:/bt/curl/lib/Release/libcurl_imp.lib 

            CURL_CONFIG:FILEPATH=C:/bt/curl/lib/curl_config.h 

            ZLIB_INCLUDE_DIR:PATH=C:/bt/zlib 

            ZLIB_LIBRARY:FILEPATH=C:/bt/zlib/Release/zlibstatic.lib



        Configure 를 눌러 설정을 새로 고침. 위의 그림은 설정을 반영한 이후의 화면입니다.

        Generate 클릭하여 솔루션 생성

        

    Visual Studio 2012에서 C:\bt\bibletime-release\bibletime.sln 열기

        툴바>솔루션구성>Release로 선택후 ALL_BUILD 컨텍스트메뉴>빌드 수행(경고 무시)

    

    INSTALL 컨텍스트메뉴>빌드를 수행하면 C:\bt\bibletime-release\install\bin 폴더에 실행을 위한 환경이 준비됩니다.


정상적인 실행을 위해서는 C:\bt\sword\lib\vcppmake\Release\libsword.dll를 C:\bt\bibletime-release\install\bin에 복사해 주어야 합니다.

    

    PACKAGE 컨텍스트메뉴>빌드 수행하면 아래의 그림과 같이 배포를 위한 설치 파일이 생성됩니다.

  *.nsi 파일은 앞서 설치한 NSIS가 설치 파일 제작을 위해 참조하는 스크립트로 이 또한 자동적으로 생성됩니다. 오픈 소스 프로젝트를 통해서 얻는 노하우가 많습니다. 최종 결과물인 bibletime-2.1.10.1-win32.exe를 배포하면 됩니다.


댓글
댓글쓰기 폼