2017/11/10

Poco Library 빌드하기 2

오래전에 "Poco Library 빌드하기" 라는 글을 썼었다.
그 후로 종종 Poco Library 새버전이 나오면 빌드를 다시 해보곤 했는데 버전업되면서 몇가지 문제가 발생하였다. 나중에 필요할 것 같아 내용을 정리 해보았다.

참고로 이전에 올렸던 글을 추가한다.
------------------------------------------------------------
Poco Library 빌드를 위한 파일은 아래와 같다.
Poco Library
 http://pocoproject.org/releases/poco-1.7.3/poco-1.7.3-all.zip

OpenSSL
 https://slproweb.com/products/Win32OpenSSL.html
 https://slproweb.com/download/Win32OpenSSL-1_0_2g.exe
 https://slproweb.com/download/Win64OpenSSL-1_0_2g.exe

MySQL
 32-bit ZIP Archive(http://dev.mysql.com/downloads/file/?id=462038)
 64-bit ZIP Archive(http://dev.mysql.com/downloads/file/?id=462039)

우선 poco-1.7.3-all.zip 파일을 특정 경로에 압축을 해제 한다. 압축 해제  후 존재하지 않는 폴더 Bin, Bin64, Lib, Lib64를 생성한다. 여기서는 D:\poco-1.7.3-all 에 압축을 해제한 것으로 간주하고 기록 하였다.
Win32OpenSSL-1_0_2g.exe 설치후 설치 경로의 bin 폴더의 libeay32.dll, ssleay32.dll파일을 Bin 폴더에 복사하고 lib 폴더의 libeay32.lib, ssleay32.lib파일을 Lib 폴더에 복사한다. 그리고 lib/VC/static 폴더의 모든파일을 Lib 폴더로 복사한다.
Win64OpenSSL-1_0_2g.exe 파일의 경우 Bin64와 Lib64 폴더로 복사를 한다. 마지막으로 include 폴더의 openssl 폴더를 D:\poco-1.7.3-all\Crypto\include 폴더에 복사한다.

MySQL에 포함되어 있는 include 폴더의 모든 파일들을 D:\poco-1.7.3-all\Data\MySQL\include 복사하고 32비트 파일에 포함되어 있는 libmysql.dll파일과 libmysqld.dll 파일을 Bin 폴더로 libmysql.lib파일과 libmysqld.lib 파일을 Lib 폴더로 복사한다. 64비트 파일에 포함되어 있는 파일들은 각각 Bin64와 Lib64로 복사한다.

마지막으로 buildwin.cmd 파일을 열어 편집 한다.
수정해야할 내용은 set OPENSSL_LIB 부분으로 32비트 버전을 빌드 할 때에는 D:\poco-1.7.3-all\Lib 로 설정하고 빌드하고 64비트로 빌드 할 때에는 D:\poco-1.7.3-all\Lib64로 설정하고 빌드 한다.

이렇게 설정하고 아래와 같이 sample과 test프로젝트를 제외하고 빌드한다.

32bit: buildwin 110 build all both Win32 nosamples notests devenv
64bit: buildwin 110 build all both x64 nosamples notests devenv


첫 번째 경험했던 문제는 PLATFORM 변수가 변경되는 문제였다. 분명 64비트로 빌드를 하였는데 32비트로 빌드되면서 빌드가 실패하였다. 일부 Visual Studio 버전에서 발생하는 것 같았는데 개발 환경 설정 후 변경되는 것 같았으나 확실한 원인은 확인하지 못 하였다. 그래서 buildwin.cmd 파일에서 두 번째 PLATFORM을 체크하기 전(184 Line)에 다시 한 번 파라메터 값을 설정하도록 추가하였다.
set PLATFORM=%5
if "%PLATFORM%"=="Win32" (set PLATFORM_SUFFIX=) else (
if "%PLATFORM%"=="x64" (set PLATFORM_SUFFIX=_x64) else (
if "%PLATFORM%"=="WinCE" (set PLATFORM_SUFFIX=_CE) else (
if "%PLATFORM%"=="WEC2013" (set PLATFORM_SUFFIX=_WEC2013))))

두 번째는 Visual Studio 2017 버전의 문제로 빌드 시도시 아래와 같이 개발 환경 설정 파일을 찾지 못하는 문제였다.
set PLATFORM=%5
Error: No Visual C++ environment found.
Please run this script from a Visual Studio Command Prompt
or run "%%VSnnCOMNTOOLS%%\vsvars32.bat" first.

확인을 해 보니 VS150COMNTOOLS 라는 변수는 정의되지 않았다. 그래서 buildwin.cmd 상단에 경로를 설정해 주었다.
set VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\
Community 버전을 사용하는 경우 경로가 다를 수 있다.

설정 후 빌드를 시도하면 시작 즈음에 Cannot open components 라는 에러가 발생하고 빌드가 멈추었다. 몇 가지 확인을 해 보니 현재 경로가 Poco 작업 경로에서 다른 경도로 변경이 되어 있었다. 그래서 빌드할 컴포넌트 찾기(316 Line)를 수행하기 전에 Poco 작업 경로로 변경을 하는 코드를 추가하였다.
cd /d %POCO_BASE%
for /f %%G in ('findstr /R "." components') do (

이렇게 해야 Visual Studio 2017 버전에서 빌드가 정상적으로 이루어졌다.

No comments :

Post a Comment