Showing posts with label Poco. Show all posts
Showing posts with label Poco. Show all posts

2018/08/21

Build Poco 1.9.0 with OpenSSL and MySQL

오랜만에 Poco 라이브러리 1.9 버전을 빌드해 보았다.
얼마전부터 계속 시도해 보았지만 OpenSSL을 포함하는데 문제가 있어서 계속 실패를 하다가 인터넷을 통해 도움을 얻어 드디어 성공하였다.
일단 Poco 라이브러리의 추가 포함 라이브러리는 목적에따라 OpenSSL과 MySQL을 추가할 수 있다.
언제든 사용할 수 있는 라이브러리라서 빌드할 때 이들을 추가해 놓으면 편할 것 같아서 항상 이를 포함하여 빌드한다.

우선 빌드에 필요한 것들은 다음과 같다.
Poco Library 1.9
https://github.com/pocoproject/poco
poco-poco-1.9.0-release.zip
OpenSSL
https://github.com/pocoproject/openssl
openssl-develop.zip
MySQL
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
mysql-5.7.23-win32.zip
mysql-5.7.23-winx64.zip

OpenSSL 빌드하기
https://github.com/pocoproject/openssl 에서 받은 소스를 빌드한다.
이미 Vsiual Studio 2013 버전으로 빌드가 되어있는 dll과 라이브러리가 소스에 포함되어있어 이를 이용하는 경우 빌드를 할 필요가 없다.
혹시 OpenSSL 버전을 변경하고자 하는경우 다시 빌드를 해야한다.
2018년 08월 17일 현재 올려져있는 버전은 1.1.0g 버전이다.
새롭게 빌드를 하고자 하는경우 소스를 압축해제하고 해제한 폴더에서 다음 명령을 수행하면 된다.
build.ps1을 실행하면 된다.
build.ps1 명령을 아래와 같은 형식이고,
build.ps1 [-openssl_release 1.0.0 | 1.1.0]
          [-vs_version 150 | 140 | 120 | 110 | 100 | 90]
          [-config     release | debug | both]
          [-platform   Win32 | x64] # TODO WinCE/WCE
          [-library    shared | static | both]
       
실행 예제는 다음과 같다.       
powershell -ExecutionPolicy RemoteSigned -File build.ps1 -openssl_release 1.1.0h -vs_version 120 -config both -platform x64 -library both

빌드를 하면 소스 경로에 VC_(버전번호) 의 폴더가 만들어지고 그 안에 결과 파일들이 생성된다.

Poco 추가 라이브러리 구성하기
먼저 Poco 라이브러리 소스 파일(poco-poco-1.9.0-release.zip)을 압축해제한다.
그리고 OpenSSL을 빌드를 하지 않은경우 openssl-develop.zip 파일의 build 폴더를 Poco 소스의 openssl 폴더에 복사한다.
OpenSSL을 빌드하였다면 결과 폴더(VC_(버전번호))를 openssl 폴더에 복사하고 이름을 build로 변경한다.

Poco 소스 폴더에 mysql 폴더를 생성하고 mysql-5.7.23-win32.zip 파일의 include 와 lib 폴더를 압축해제하고 lib 폴더는 lib32로 변경한다.
그리고 mysql-5.7.23-winx64.zip 파일의 lib 폴더를 mysql 폴더에 압축해제하고 lib64로 변경한다.
그러면 최종적으로 추가 생성된 폴더는 아래와 같은 구성된다.
poco-poco-1.9.0-release
openssl
build
include
openssl
win32
bin
lib
win64
bin
lib
mysql
include
lib32
lib64

빌드를 하기전에 buildwin.cmd 파일에서 위에서 구성한 mysql 폴더를 사용하도록 변경을 해 주어야한다.
PLATFORM 파라메터를 인식한 후에 아래 코드를 추가(62line)한다.
rem MySQL
set MYSQL_DIR=%POCO_BASE%\mysql
set MYSQL_INCLUDE=%MYSQL_DIR%\include
if "%PLATFORM%"=="Win32" (set MYSQL_LIB=%MYSQL_DIR%\lib32)
if "%PLATFORM%"=="x64" (set MYSQL_LIB=%MYSQL_DIR%\lib64)
set INCLUDE=%INCLUDE%;%MYSQL_INCLUDE%
set LIB=%LIB%;%MYSQL_LIB%

echo MySQL Path: %MYSQL_DIR%
echo Include: %INCLUDE%
echo Lib: %LIB%
pause

echo 명령과 pause 명령은 mysql 관련 설정이 제대로 되었는지 확인하기 위해 넣은 코드이다.

이제 Visual Studio 버전에 맞는 빌드 명령을 호출하면 된다.
buildwin.cmd 명령 형식은 다음과 같다.
Usage:
------
buildwin VS_VERSION [ACTION] [LINKMODE] [CONFIGURATION] [PLATFORM] [SAMPLES] [TESTS] [TOOL]
VS_VERSION:    "90|100|110|120|140|150"
ACTION:        "build|rebuild|clean"
LINKMODE:      "static_mt|static_md|shared|all"
CONFIGURATION: "release|debug|both"
PLATFORM:      "Win32|x64|WinCE|WEC2013"
SAMPLES:       "samples|nosamples"
TESTS:         "tests|notests"
TOOL:          "devenv|vcexpress|wdexpress|msbuild"

아래 명령은 Visual Studio 2013 버전으로 빌드하기 위해 실행한 명령이다.
buildwin.cmd 120 build all both x64 samples tests msbuild

빠르게 빌드만 하려면 SAMPLES과 TESTS에 대하여 nosamples 와 notests로 설정하여 빌드한다.

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 버전에서 빌드가 정상적으로 이루어졌다.

2016/05/03

Poco Library 빌드하기

얼마전에 공개된 Poco Library v1.7.3 버전을 빌드해 보았다.
배포되는 Poco Library 중 poco-1.7.3-all.zip 을 다운 받았다. 이 버전은 OpenSSL과 MySQL Client 라이브러리를 필요로 한다.

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: D:\poco-1.7.3-all\buildwin 110 build all both Win32 nosamples notests devenv
64bit: D:\poco-1.7.3-all\buildwin 110 build all both x64 nosamples notests devenv

buildwin 실행 결과 32비트와 64비트 모두 에러 없이 빌드를 마쳤고 dll과 lib 파일이 생성 되었다.