OpenSSL Windows下编译 和 SymbolLink的妙用

编译环境:VS2008,ActivePerl 5.14.2.1402

  1. 安装ActivePerl, 安装完成后, 系统环境变量中已经将C:\Perl\site\bin加入Path
  2. 进入VS2008的命令行编译环境,如下图:

image

如果用VC6编译, 设置编译环境用:

C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT

  1. 进入openssl解压后的根目录:cd D:\Code\ThirdSDK\openssl\openssl-1.0.1c
  2. perl configure VC-WIN32
  3. 在根目录下执行:ms\do_ms,do_ms是个bat文件,须在根目下执行,否则某些路径找不到;
  4. 然后nmake -f ms\ntdll.mak

ntdll.mak - 对应编译成dll动态连接库, nt.mak对应编译成静态连接库;

编译成debug版本的, 需要修改do_ms.bat

打开do_ms.bat, 修改:

perl util\mk1mf.pl debug no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl debug dll no-asm VC-WIN32 >ms\ntdll.mak
perl util\mk1mf.pl debug no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl debug dll no-asm VC-CE >ms\cedll.mak

顺便记录一下一个“乌龙”:

看到openssl中的头文件都这样包含(很多开源代码都这样),

#include <openssl/x509.h>
#include <openssl/evp.h>
……

当时查了一下, 发现x509.h在crypto\x509目下, evp.h在crypto\evp下,当下就想,这样包含

该怎么设置包含路径呢,环境变量不好设,project中的include也不好设,后来在编译openssl时,

才发现include目录(乌龙),openssl的开发者用这个目录中的头文件很巧妙的解决了这个问题,

这些头文件都是些symlink,symlink完成头文件相对路径的一一映射,POSIX的东西了解太少!

image

原来在Window下写驱动时,经常用到IoCreateSymbolicLink,今天查了一下,在Platform

SDK中,也有CreateSymbolLink这个API,不过要Vista以上版本才支持;还有一个

 

 

CreateHardLink,这个Windows 2000以上就可以支持,但CreateHardLink只支持对文件创建

HardLink. 具体就不啰唣,MSDN比我说的清楚;眨眼

 

 

 

你可能感兴趣的:(windows)