编译 libcurl with SSL :
1. 安装 Perl : ActivePerl-5.8.0.806-MSWin32-x861.msi
2. 编译 OpenSSL :( Windows/VC 下编译成 DLL )
a) 下载 openssl ,目前版本是: openssl-0.9.8g 。
b) 解压,比如: D:/.
c) cd d:/openssl-0.9.8g
d) perl Configure VC-WIN32
e) ms/do_masm.bat ,或者 ms/do_ms.bat 、 ms/do_nasm.bat
f) 到 VCStudio 的 VC98 ( VC6 ,在 .Net 下是 VC7 )目录,运行: vcvars32.bat
g) 回到 d:/openssl-0.9.8g ,运行: nmake -f ms/ntdll.mak
h) 如果成功的话,会在 out32dll 目录下生成 libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib
在编译的时候,可能会出现以下问题:
Assembling: ./crypto/sha/asm/sha512-sse2.asm ./crypto/sha/asm/sha512-sse2.asm(29) : error A2006: undefined symbol : XMMWORD 。
这是因为: ./crypto/perlasm/x86ms.pl 中对 masm 的版本定义不对, OpenSSL 网站上给出一个此文件的补丁:
openssl/crypto/perlasm/x86ms.pl 1.18.2.3 -> 1.18.2.4
--- x86ms.pl 2007/07/19 10:45:03 1.18.2.3
+++ x86ms.pl 2007/10/21 14:15:40 1.18.2.4
@@ -339,8 +339,17 @@
sub main'file_end
{
# try to detect if SSE2 or MMX extensions were used...
- if (grep {//b[x]?mm[0-7]/b,/i} @out) {
- grep {s//.[3-7]86//.686/n/t/.XMM/} @out;
+ my $xmmheader=<<___;
+.686
+.XMM
+IF /@Version LT 800
+XMMWORD STRUCT 16
+ DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+___
+ if (grep {//b[x]?mm[0-7]/b/i} @out) {
+ grep {s//.[3-7]86/$xmmheader/} @out;
}
push(@out,"_TEXT/$ ENDS/n");
push(@out,"END/n");
但是仍然不对,所以干脆用 NASM ,回退到步骤 e) ,运行 ms/do_nasm.bat ,然后依然按照下面的步骤进行。
3. 编译 Libcurl :
a) 下载 curl 源代码,当前版本是 curl-7.17.1
b) 解压
c) 到 VCStudio 的 VC98 ( VC6 ,在 .Net 下是 VC7 )目录,运行: vcvars32.bat 。(由于安装 OpenSSL 的时候已经做过,这步可省略)
d) 添加环境变量: OPENSSL_PATH=D:/openssl-0.9.8g
e) 到 curl 目录下,运行 nmake vc-ssl-dll
f) 成功,则在 ./lib 下生成 libcurl.lib 。
g) 要得到 libcurl.dll ,可以运行 ./lib/curllib.dsw ,这是一个 Visual Studio 6.0 的工程,编译成功后可在 ./lib/Debug 下生成 libcurl.dll 。
其中,可能出现如下错误:
…/lib/ldap.c(49) : fatal error C1189: #error : Your Platform SDK is NOT sufficient for LDAP support! Update your Platform SDK, or disable
LDAP LDAP support!
原因是在 ldap.c 中会出现 # include <winldap.h> ,将 winldap.h 所在目录加到工程的 project->Setting->C/C++->Category:Preprocessor->Additional include Directories 中去即可。
另外, OpenSSL 和 Curl 的 include 目录 openssl 和 curl 分别在各自主目录的 inc32 和 include 下。在编程时转移到资源目录或者直接 include 即可。
有关curl的资料可以在http://curl.haxx.se 找到。