vs2010编译带openssl 及zlib的curl库注意事项

一、选择openssl以支持https协议类url,并能开启curl的多线程支持,另外openssl兼容性强于windows sspi

开启多线程锁,需要库openssl及libssh2

static CMyCritSec **g_lockarray;
#define  USE_OPENSSL
#ifdef USE_OPENSSL
static void lock_callback(int mode, int type,const char *file, int line)
{
(void)file;
(void)line;
if (mode & CRYPTO_LOCK) {
g_lockarray[type]->Lock();
}
else {
g_lockarray[type]->Unlock();
}
}
static unsigned long thread_id(void)
{
unsigned long ret;
ret=(unsigned long)GetCurrentThreadId();
return(ret);
}
static void init_ssllocks(void)
{
int i;
g_lockarray=(CMyCritSec**)OPENSSL_malloc(CRYPTO_num_locks() *
sizeof(CMyCritSec*));
for (i=0; ig_lockarray[i]=new CMyCritSec();
}
CRYPTO_set_id_callback((unsigned long (*)())thread_id);
CRYPTO_set_locking_callback(lock_callback);
}
static void kill_ssllocks(void)
{
int i;
CRYPTO_set_locking_callback(NULL);
for (i=0; idelete g_lockarray[i];
OPENSSL_free(g_lockarray);
}
#endif

二、zlib库编译,zlib库加入之后curl库才能处理网站传来的压缩编码数据,CURLOPT_ACCEPT_ENCODING选项才能有效。

      我选择项目zlibstat,输出静态库,配置选择ReleaseWithoutAsm,这个配置不带asm宏,如果带了,在调用uncompress解压数据的时候,很有可能会在inflate_fast这个函数里面崩溃掉。编译运行时库要和curl库保持一致,我用的md选项。

zconfig.h 355行改为#    define ZEXPORT __cdecl //WINAPI

 三、cul库编译

从经验来看,多线程模式下,curl库最好用dll方式调用。

预定义头:BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;HAVE_LIBZ;HAVE_ZLIB_H;%(PreprocessorDefinitions)

如果要带zlib库后两个定义是必须的HAVE_LIBZ;HAVE_ZLIB_H


你可能感兴趣的:(vs2010编译带openssl 及zlib的curl库注意事项)