虽然,线上运行的服务都是在Linux平台,直接在Linux上编译对应的passport模块就可以了

但是,我们的很多开发人员仍然是在Windows下工作,所以需要passport模块的windows版本

最近,passport模块又进行了升级,可以支持多账号绑定功能了

于是,又需要编译一个Windows下的新版本,原来曾经编译过,但编译的环境没有了

上午又捣鼓了半天,终于编出来dll了,记录一下过程

  1. 安装Apache2.2,选择“自定义安装”,需要把一些headers和libs给装上
  2. 安装Win32Openssl,我装的版本是Win32OpenSSL-0_9_8e
  3. 安装Visual Studio express 2008中的Visual C++,它已经包含SDK工具包了
  4. 参考vsvars32.bat,写了一个bat文件:
@set PATH=C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;%PATH%
@set INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include;c:\Program Files\Apache Software Foundation\Apache2.2\include;c:\Program Files\OpenSSL\include;%INCLUDE%
@set LIB=C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;c:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;c:\Program Files\Apache Software Foundation\Apache2.2\lib;c:\Program Files\OpenSSL\lib\VC;%LIB%
@set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;%LIBPATH%

cl /MD /D "WIN32" /c mod_passport.c
link /DLL mod_passport.obj libhttpd.lib libapr-1.lib libeay32MD.lib
mt -manifest mod_passport.dll.manifest -outputresource:mod_passport.dll;#2

在编译过程中,报了一个错:

 mod_passport.c(896) : error C2275: “BIO”: 将此类型用作表达式非法
 c:\Program Files\OpenSSL\include\openssl/bio.h(199) : 参见“BIO”的声明

在宋老师的指点下,把bio的声明给提前到所在函数的第一行就可以了