2016-01-28
openssl 1.0.2e
*32 bit
-x86 static debug library
perl Configure debug-VC-WIN32 --openssldir=C:\OpenSSL-x86-debug no-shared no-asm threads no-idea no-mdc2 no-rc5
-x86 static release library
perl Configure VC-WIN32 --openssldir=C:\OpenSSL-x86 no-shared no-asm threads no-idea no-mdc2 no-rc5
ms\do_ms
ms\nt.mak 편집
LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib 같이
/Zi 있으면 모두 /Z7 /Ylsymbol 로 변경
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
*64 bit
-x64 static debug library
perl Configure debug-VC-WIN64A --openssldir=C:\OpenSSL-x64-debug no-shared no-asm threads no-idea no-mdc2 no-rc5
-x64 static release library
perl Configure VC-WIN64A --openssldir=C:\OpenSSL-x64 no-shared no-asm threads no-idea no-mdc2 no-rc5
ms\do_win64a.bat
ms\nt.mak 편집
LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib 같이
/Zi 있으면 모두 /Z7 /Ylsymbol 로 변경
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
nmake -f ms\nt.mak clean
*사용
../openssl/include
#pragma comment(lib, "../openssl/lib/libeay32.lib")
#pragma comment(lib, "../openssl/lib/ssleay32.lib")
-------------------------------------------------------------------------------------------
윈도우용 visual studio 2010 에서 libcurl/openssl static library 컴파일
binary 다운로드
libcurl
curl-7.24.0.zip : http://curl.haxx.se/download.html
추천 확장 라이브러리 : http://curl.haxx.se/docs/libs.html
openssl
openssl-1.0.0.g.tar.gz : http://www.openssl.org/source/
openssl 컴파일
0.openssl-1.0.0.g.tar.gz 압축 해제 (설치방법 파일 : INSTALL.W32)
static library로 컴파일한다.
1.ActivePerl 다운로드 & 설치 : http://www.activestate.com/ActivePerl
2.openssl 디렉토리 이동
3."Visual Studio 명령 프롬프트(2010)" 실행
혹은
일반 명령 프롬프트에서 "%VS100COMNTOOLS%vsvars32.bat" 실행
4.Configure
> perl Configure VC-WIN32 no-asm no-idea no-mdc2 no-rc5 --prefix=.\lib_static
라이센스 문제가 걸릴만한 암호화 제외 및 NASM 미사용(no-asm)
lib_static 디렉토리에 라이브러리 및 해더 생성하도록 지정
> ms\do_ms
ms\nt.mak 생성됨
5. ms\nt.mak 편집
- 경고를 에러 처리 안하도록 변경
CFLAG= /MT /Ox /O2 /Ob2 -DOPENSSL_THREADS -DDSO_WIN32 -W3 -WX ...
에서 -WX를 -WX- 로 변경
- PDB 없어도 디버깅 정보를 라이브러리에 넣기 위한 옵션
LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib
를
LIB_CFLAG=/Zl /Z7 /Ylsymbol /Fd$(TMP_D)/lib
로 변경
6. static library 컴파일
> nmake -f ms\nt.mak clean
> nmake -f ms\nt.mak
> nmake -f ms\nt.mak install
> nmake -f ms\nt.mak clean
참고. 3,4,6번 자동화 lib_static.bat 파일
@echo off
call "%VS100COMNTOOLS%vsvars32.bat"
call perl Configure VC-WIN32 no-asm no-idea no-mdc2 no-rc5 --prefix=.\lib_static
call ms\do_ms
pause
REM pause 되었을때 nt.mak 의 컴파일 옵션 변경
call nmake -f ms\nt.mak clean
call nmake -f ms\nt.mak
call nmake -f ms\nt.mak install
call nmake -f ms\nt.mak clean
pause
7. 테스트 프로젝트
// 추가 포함디렉토리 지정 : ../openssl-1.0.0g/lib_static/include
#pragma comment(lib, "../openssl-1.0.0g/lib_static/lib/libeay32.lib")
#pragma comment(lib, "../openssl-1.0.0g/lib_static/lib/ssleay32.lib")
#include <openssl/ssl.h>
#include <openssl/rand.h>
int _tmain(int argc, _TCHAR* argv[])
{
int nRand = 0;
RAND_bytes((unsigned char *)&nRand, 1);
printf("Random number is %d\n", nRand);
return 0;
}
libcurl
1.curl-7.24.0.zip 압축 해제 및 vc6curl.dsw 실행하여
visual studio 2010 프로젝트로 자동 업그레드
libcurl 프로젝트의 LIB_Debug, LIB_Release가 static library 컴파일임
2.libcrul 프로젝트 옵션 변경(LIB_Debug, LIB_Release)
opensssl 사용
추가 포함 디렉토리 추가 : ../../openssl-1.0.0g/lib_static/include
전처리기 정의 추가 : USE_SSLEAY;USE_OPENSSL
lib에 디버깅 정보 포함
디버그 정보 형식 : C7 호환 (/Z7)
명령줄 -> 추가 옵션(D) : /Ylsymbol
코드생성 > 런타임 라이브러리 변경
LIB_Debug : 다중 스레드 디버그 (/MTd)
LIB_Release : 다중 스레드 (/MT)
3. 컴파일
static library 위치
curl-7.24.0\lib\LIB_Debug\libcurld.lib
curl-7.24.0\lib\LIB_Release\libcurl.lib
header 위치
curl-7.24.0\include
4. 테스트 프로젝트
프로젝트 옵션
추가 포함 디렉토리 지정 : ../curl-7.24.0/include;../openssl-1.0.0g/lib_static/include
코드 생성 > 런타임 라이브러리 : /MT, /MTd
전처리기 정의 추가 : CURL_STATICLIB
버전전 정보 확인
#if defined(_DEBUG)
#pragma comment(lib, "../curl-7.24.0/lib/LIB-Debug/libcurld.lib")
#else
#pragma comment(lib, "../curl-7.24.0/lib/LIB-Release/libcurl.lib")
#endif
#pragma comment(lib, "../openssl-1.0.0g/lib_static/lib/libeay32.lib")
#pragma comment(lib, "../openssl-1.0.0g/lib_static/lib/ssleay32.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "wldap32.lib")
#include <curl/curl.h>
int _tmain(int argc, _TCHAR* argv[])
{
cout << "###############################################################\n"
<< "## version\n"
<< "curl_version : " << curl_version() << "\n";
curl_version_info_data* ver = curl_version_info(CURLVERSION_NOW);
cout << " ver->age: ";
switch(ver->age)
{
case CURLVERSION_FIRST: cout << "CURLVERSION_FIRST"; break;
case CURLVERSION_SECOND: cout << "CURLVERSION_SECOND"; break;
case CURLVERSION_THIRD: cout << "CURLVERSION_THIRD"; break;
case CURLVERSION_FOURTH: cout << "CURLVERSION_FOURTH"; break;
case CURLVERSION_LAST: cout << "CURLVERSION_LAST"; break;
default: cout << "default"; break;
}
cout << "\n";
cout << " ver->version: " << null(ver->version) << "\n"
<< " ver->version_num: " << ver->version_num << "\n"
<< " ver->host: " << null(ver->host) << "\n"
<< " ver->features: " << ver->features << "\n"
<< " ver->ssl_version: " << null(ver->ssl_version) << "\n"
<< " ver->ssl_version_num: " << ver->ssl_version_num << "\n"
<< " ver->libz_version: " << null(ver->libz_version) << "\n"
<< " ver->protocols: " << ver->protocols << "\n"
<< " ver->ares: " << null(ver->ares) << "\n"
<< " ver->ares_num: " << ver->ares_num << "\n"
<< " ver->libidn: " << null(ver->libidn) << "\n"
<< " ver->iconv_ver_num: " << ver->iconv_ver_num << "\n"
<< " ver->libssh_version: " << null(ver->libssh_version) << "\n"
;
cout << "#### ver->features detail : \n";
(ver->features & CURL_VERSION_IPV6) ? cout << "CURL_VERSION_IPV6 : on \n" : cout << "CURL_VERSION_IPV6 : off \n";
(ver->features & CURL_VERSION_KERBEROS4) ? cout << "CURL_VERSION_KERBEROS4 : on \n" : cout << "CURL_VERSION_KERBEROS4 : off \n";
(ver->features & CURL_VERSION_SSL) ? cout << "CURL_VERSION_SSL : on \n" : cout << "CURL_VERSION_SSL : off \n";
(ver->features & CURL_VERSION_LIBZ) ? cout << "CURL_VERSION_LIBZ : on \n" : cout << "CURL_VERSION_LIBZ : off \n";
(ver->features & CURL_VERSION_NTLM) ? cout << "CURL_VERSION_NTLM : on \n" : cout << "CURL_VERSION_NTLM : off \n";
(ver->features & CURL_VERSION_GSSNEGOTIATE) ? cout << "CURL_VERSION_GSSNEGOTIATE : on \n" : cout << "CURL_VERSION_GSSNEGOTIATE : off \n";
(ver->features & CURL_VERSION_DEBUG) ? cout << "CURL_VERSION_DEBUG : on \n" : cout << "CURL_VERSION_DEBUG : off \n";
(ver->features & CURL_VERSION_ASYNCHDNS) ? cout << "CURL_VERSION_ASYNCHDNS : on \n" : cout << "CURL_VERSION_ASYNCHDNS : off \n";
(ver->features & CURL_VERSION_SPNEGO) ? cout << "CURL_VERSION_SPNEGO : on \n" : cout << "CURL_VERSION_SPNEGO : off \n";
(ver->features & CURL_VERSION_LARGEFILE) ? cout << "CURL_VERSION_LARGEFILE : on \n" : cout << "CURL_VERSION_LARGEFILE : off \n";
(ver->features & CURL_VERSION_IDN) ? cout << "CURL_VERSION_IDN : on \n" : cout << "CURL_VERSION_IDN : off \n";
(ver->features & CURL_VERSION_SSPI) ? cout << "CURL_VERSION_SSPI : on \n" : cout << "CURL_VERSION_SSPI : off \n";
(ver->features & CURL_VERSION_CONV) ? cout << "CURL_VERSION_CONV : on \n" : cout << "CURL_VERSION_CONV : off \n";
(ver->features & CURL_VERSION_CURLDEBUG) ? cout << "CURL_VERSION_CURLDEBUG : on \n" : cout << "CURL_VERSION_CURLDEBUG : off \n";
(ver->features & CURL_VERSION_TLSAUTH_SRP) ? cout << "CURL_VERSION_TLSAUTH_SRP : on \n" : cout << "CURL_VERSION_TLSAUTH_SRP : off \n";
(ver->features & CURL_VERSION_NTLM_WB) ? cout << "CURL_VERSION_NTLM_WB : on \n" : cout << "CURL_VERSION_NTLM_WB : off \n";
cout << endl;
return 0;
}
'C++' 카테고리의 다른 글
Mutex로 중복실행 방지 (0) | 2012.02.24 |
---|---|
[wxWidgets] command line 인자 받기 (0) | 2012.02.20 |
[libcurl] curl_multi_perform 사용시 -1 (select error) (0) | 2012.02.13 |
InstallShield 로 작성되어 설치된 프로그램 버전 정보 (0) | 2012.02.01 |
현재 프로그램이 사용중인 메모리 사용량 (0) | 2012.01.02 |
IE9 .exe 파일 다운로드 및 실행시 "이 프로그램은 컴퓨터를 손상시킬 수 있습니다." (0) | 2011.10.21 |
std::find_if (0) | 2011.10.21 |
boost 설치 (0) | 2011.08.17 |