curl with ssl support for win32

本文详细介绍了在使用libcurl时,如何正确配置OpenSSL以启用SSL支持,并解决了在编译过程中遇到的问题。通过安装和编译OpenSSL,设置正确的路径和环境变量,最终成功实现了SSL功能的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Preprocessor

The following two symbols need to be fed to the preprocessor to enable SSL for libcurl:

USE_SSLEAY
USE_OPENSSL

(libcurl uses OpenSSL for SSL support)

Alternatively the symbols can be added directly to a file called setup.h in libcurl, but I'm not too happy about modifying code in 3rd party distributions unless I really have to.

Rebuilding the libcurl library, I now got some errors about OpenSSL include files not being found. Naturally, since I haven't set up the OpenSSL distribution properly yet.

Compiling OpenSSL binaries

I downloaded the OpenSSL 0.9.8 source distribution and unpacked it.

In the root of the source distribution there's a file called INSTALL.W32 which describes how to compile the OpenSSL binaries. The build chain requires perl, so I installed the latest version of ActivePerl.

I had some trouble with the build, which might not be applicable to all systems, but I'll go through it here in case somebody experiences the same.

According to INSTALL.W32:

Run the following commandline tasks with current directory set to the source distribution root:

1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

(Where "c:/some/openssl/dir" should be replaced by the dir where OpenSSL should be installed. Don't use spaces in this path. The compilation further ahead will fail in that case)

2> ms\do_ms

For me this step was unsuccessful at first, since I lacked the environment variables OSVERSION and TARGETCPU. I set these to 5.1.2600 and x86 respectively. You may get complaint about OSVERSION being "insane", but look closer, this error is for WinCE and doesn't affect the Win32 setup. To get hold of your OS version, run the 'ver' command from a command prompt or run winver.exe.

3> nmake -f ms\nt.mak (forstatic library)

or

3> nmake -f ms\ntdll.mak (for DLL)

The source now compiles. Took approx 5 minutes on my laptop.

When compilation is completed, the libs or binaries have been placed in:

distroot/out32 - for static library build

or

distroot/out32dll - for DLL build

Building and linking

Now, back to visual studio and point out the libs and include path for headers. The include files are located in distroot/inc32/openssl.

Remember to add libeay32.lib and ssleay32.lib as linker input.

Rebuild the libcurl project.

Error!

Well at least for me with this version of OpenSSL. it complained about a struct typedef in one of the OpenSSL headers. I couldn't find any info on this. After an hour of googling I broke my own principle and commented out the typedef from the OpenSSL header, and luckily libcurl wasn't using that symbol so it built fine.

Update: As pointed out by Jason, this issue seems to have dissapeared as of version 1.0.0a.

Now, for confirming that SSL support is enabled for libcurl, run the following code:

curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
   
// SSL support enabled
else
   
// No SSL

Simple as that.

转载于:https://www.cnblogs.com/ytjjyy/archive/2012/10/18/2729952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值