compile vmime on windows with msvc9

VMIME是一个GNU下开源的第三方类库,主要是支持各种邮件协议的。
 

已经无力吐槽windows下C++的各种第三方库编译带给我的忧伤了,先上需要的类库

  libvmime-0.9.1.tar.bz
  http://www.vmime.org/downloads.html

  libiconv-1.9.1
  http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.1.tar.gz

  gettext-0.13.1.tar.gz
  http://ftp.gnu.org/pub/gnu/gettext/gettext-0.13.1.tar.gz

  libgsasl-1.4.4.tar.gz
  ftp://ftp.gnu.org/gnu/gsasl/

  gnutls-2.10.1-x86.exe(这个有点奇葩,稍候再表)
  ftp://ftp.gnu.org/gnu/gnutls/

  (一).libiconv gettext 依赖编译
  VMIME要用到iconv()这个函数,而libiconv与gettext库是又是相互依赖编译的,有点麻烦
   1.在c盘根目录下建立usr文件夹,并将libvmime-0.9.1.tar.bz和gettext-0.13.1.tar.gz都解压到这个文件夹中
   2.编译并安装不支持国际化的iconv
   打开VC9的Visual Studio 2008 Command Prompt,先在libvime目录下,输入如下命令
   nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD(注意,MFLAGS这个参数要与你项目的Runtime library相符);
   等ok后,再输入如下命令
   nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD install
   等ok后,再输入如下命令
    nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD distclean
   3.编译并安装gettext
   打开VC9的Visual Studio 2008 Command Prompt,转到gettext目录下,输入如下命令
   nmake -f Makefile.msvc DLL=1 MFLAGS=-MD
   等ok后,再输入如下命令
   nmake -f Makefile.msvc DLL=1 MFLAGS=-MD install
   4.编译并安装支持国际化的iconv
   打开VC9的Visual Studio 2008 Command Prompt,再转到libvime目录下,输入如下命令
    nmake -f Makefile.msvc DLL=1 MFLAGS=-MD
   等ok后,再输入如下命令
   nmake -f Makefile.msvc DLL=1 MFLAGS=-MD install

   之所以这么麻烦,就是因为这俩库相互依赖,所以编译顺序是libiconv->gettext->libiconv
   注意一定要在c:/usr下进行编译,否则会出错误的。(linux下的库就是恶心...)
   如果还不明白的话,就看下libvmime下的README.msvc,希望有帮助...

  (二)libsasl编译
   libsasl的库编译比较简单,里面有sln的工程文件,打开直接build就可以了,不过1.6貌似编译不过,1.4就可以

  (三)gnutls编译
   gnutls的编译比较奇葩,下载它的一个exe安装程序,安装完成后,用VC9的Visual Studio 2008 Command Prompt进到它的安装目录下(C:\Program Files\GnuTLS\bin),然后输入如下命令:
   lib /def:libgnutls-26.def   
   This will create a libgnutls-26.lib that can be used as a import library for Visual Studio projects.
   Build a sample program to test it as follows:
   C:\Program Files\GnuTLS\bin>cl foo.c -I../include -Dssize_t=long libgnutls-26.lib ... C:\Program Files\GnuTLS\bin>foo foo 1.6.0 C:\Program Files\GnuTLS\bin>
   参考:http://josefsson.org/gnutls4win/
  
Using the GnuTLS DLL from your Visual Studio program一栏
 
 
  (四)vmime编译
   将前面编译过的include下的头文件都放到VC9的目录(../VC/include)下,将lib文件都放到VC9的目录(../VC/lib)目录下,然后打开vmime中提供的sln工程文件,build,成功!

   如果vmime编译过程中出现了一个比较蛋疼的错误,如ssize_t未定义等,可以把vmime目录下的src文件remove,然后rebuild,应该就可以了
原文地址:https://www.cnblogs.com/qiuyeyaozhuai/p/2719061.html