用vs6编译openssl-1.0.0e

用vs6编译openssl-1.0.0e


一 openssl的获取

http://www.openssl.org/source/

目前最新版是openssl-1.0.0e


二 还需要一份ActivePerl

http://www.activestate.com/activeperl/downloads



三. 编译

   openssl其实自带说明,可以打开INSTALL.xxx来看,比如 INSTALL.W32 就是win32平台下的安装说明,不过本文会相对详细些:)


1. 解压openssl-1.0.0e,比如C:\openssl-1.0.0e

2. 命令行依次执行


cd C:\openssl-1.0.0e
c:

perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0 --prefix=c:\openssl-1.0.0e

(如果要编译debug版本则:Perl Configure debug-VC-WIN32 -DOPENSSL_USE_IPV6=0 --prefix=c:\openssl-1.0.0e)

ms\do_ms
nmake -f ms\nt.mak (如果要编译动态库则执行nmake -f ms\ntdll.mak)



3. 编译中可能遇到各种问题

a) ml.exe版本过高或者过低都是杯具

   过低可能对路径的识别产生问题(看起来好像是不认空格路径之类)

   过高会引发一个"debugging information corrupt; recompile module"的错误,然后如果去网上搜,千篇一律的告诉你三种解决方案,只用Release编译/修改SDK顺序/用一个微软已经不提供下载的SDK(Microsoft Platform SDK for Windows XP SP2)
   但事实上,用Release编译,那以后用了这个库的程序就几乎不能debug了,link选项中不能用/debug(Generate debug info),否则也是这个编译错,这不是扯么= =,摆弄SDK让环境更加复杂化,实际上也不顶用
   

   后面在这里找到了答案 http://blog.csdn.net/everandforever/article/details/6102781

------
下载Visual C++ 6.0 Processor Pack并解压(无须安装),将其中的ml.exe复制到VC6的bin目录下,例如D:\Microsoft Visual Studio\VC98\Bin。使用其它版本ml.exe会报错“LNK1103 debugging information corrupt”
-----

   http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx


b) NMAKE : fatal error U1077: 'cl' : return code '0x2'

禁用IPV6就好,perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0

见 http://rt.openssl.org/Ticket/Display.html?id=2097&user=guest&pass=guest



四. 使用

   执行ms\do_ms后,打开nt.mak,会发现编译选项是 /MT /Zi /Fdxxx

1. 诚然nt.mak是编译出一个静态库,但若使用到的工程是/MD的,我们也需要工程设置保持统一,即改为/MD

2. /Zi 选项将导致生成pdb,然后使用到库的工程如果没这个pdb就会在编译debug版本的时候报无数warning告诉你找不到各种pdb。

  参:http://msdn.microsoft.com/zh-cn/library/958x11bc(v=vs.80).aspx

  可以选择直接删除掉(不生产调试信息),或者改成/Z7

  两者的区别是,前者没有那些信息,生成的文件较小,编译较快,不过运行到库提供的接口的时候,没法进一步调试,后者会询问源代码的路径,视个人需要修改

你可能感兴趣的:(c,windows,Microsoft,Module,perl,debugging)