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

来源:互联网 发布:中国历年gdp增长率数据 编辑:程序博客网 时间:2024/06/03 23:00

 编译libcurl with SSL

1.  安装PerlActivePerl-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.batms/do_nasm.bat

f)         VCStudioVC98VC6,在.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)        VCStudioVC98VC6,在.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中去即可。

另外,OpenSSLCurlinclude目录opensslcurl分别在各自主目录的inc32include下。在编程时转移到资源目录或者直接include即可。

有关curl的资料可以在http://curl.haxx.se找到。

 
原创粉丝点击