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; i<CRYPTO_num_locks(); i++) {
g_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; i<CRYPTO_num_locks(); i++)
delete 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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值