在Windows Visual C++ 6.0/7.0下编译带ssl的curl库

  编译 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 找到。

 

猜你喜欢

转载自blog.csdn.net/spacetiller/article/details/1916536