使用Visual Studio 2010本地构建libxml-python

 由于要使用libxml-python,官方下载的Windows二进制发布安装包会向系统添加反安装信息,和经典Windows应用程序混为一堂,不方便管理,因此决定自己在本地进行编译,加之这样可以部分避开MinGW中转。MinGW在本机的表现实在令人蛋疼,部分应用效率之差都不敢恭维啊。在构建过程中遇到了一些问题,部分问题发现是自己再4年前的项目应用中解决过的,由于当时没留下记录,所有的图破又重走一遍,实在是浪费生命,本次发誓特别地将其记录下来。
 首先是准备工作,先下载几个必要的源代码包,罗列如下:
 zlib,官网http://zlib.net/是进不去了,不知道是墙了还是网站本身就不可用,反正就是用不了,还好在本地找到了自己以前下载的一个版本,在此唠叨两句,此等连许多优秀开源软件的站点都被墙的政策实在是令人愤慨!
 libiconv,下载地址http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz;
 libxml2,ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz;
 libxslt,ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz。
 下载源码包完毕,现在开始逐个构建。
 一、zlib构建
 1、解压zlib源码包至本地某目录,如解压到E:\Home\zlib125;
 2、打开Visual Studio 2010的命令行工具窗口,执行cd到解压好的源代码目录:>cd E:\Home\zlib125;
 3、执行>nmake /f win32\Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj";
 4、执行无错误后产生需要的zlib1.dll和zlib1.lib。
 二、libiconv构建
 1、解压libiconv源码包至本地某目录,如加压到E:\Home\libiconv-1.14;
 2、由于libiconv放弃支持nmake构建,此处只有借助MinGW或Cygwin;
 3、构建办法和类Unix就没什么分别了,只是目录地址和Windows的磁盘盘符要注意结合起来;
 4、构建完成后生成libcionv.dll和libiconv.lib。
 三、libxml2构建
 1、将libxml2源码包解压至本地某目录,如E:\Home\libxml2-2.7.8;
 2、打开Visual Studio 2010的命令行工具窗口,执行cd到解压好的源代码目录:>cd E:\Home\libxml2-2.7.8;
 3、执行cd到win32子目录,>cd win32,执行>cscript configure.js --help查看支持的编译选项;
 4、根据需要添加和去除编译选项,如>cscript configure.js prefix=d:\libxml2-2.7.8 include=E:\Home\libiconv-1.14\include lib=E:\Home\libiconv-1.14\lib incdir=d:\libxml2-2.7.8\include libdir=d:\libxml2-2.7.8\lib bindir=d:\libxml2-2.7.8\bin sodir=d:\libxml2-2.7.8\bin iconv=yes zlib=yes;
 5、编辑Makefile.msvc文件,查找“+”字符,删除3处“+”号(估计是不是GNU和MS的傻瓜用户搞恶作剧,埋下这等地雷),查找编译选项/OPT:NOWIN98,删除之;
 6、编辑源码根目录的testapi.c文件删除第294行(此时不删除也行,编译报错时将该不可见的字符常量修改为任意的字符常量,该函数主要用来测试API,对最终API的使用没有影响);
 7、在win32目录下执行>nmake /f Makefile.msvc,编译无错误后可以执行>nmake /f Makefile.msvc install将并以结果安装到预定义的目录下。
 四、libxslt构建
 libxslt构建和libxml2构建大同小异,好处是基本没有什么错误需要你去纠偏,做法如下:
 1、将libxslt源码包解压至本地某目录,如E:\Home\libxslt-1.1.26;
 2、打开Visual Studio 2010的命令行工具窗口,执行cd到解压好的源代码目录:>cd E:\Home\libxslt-1.1.26;
 3、执行cd到win32子目录,>cd win32,执行>cscript configure.js --help查看支持的编译选项;
 4、根据需要添加和去除编译选项,如>cscript configure.js prefix=d:\libxslt-1.1.26 include=E:\Home\libiconv-1.14\include lib=E:\Home\libiconv-1.14\lib incdir=d:\libxslt-1.1.26\include libdir=d:\libxslt-1.1.26\lib bindir=d:\libxslt-1.1.26\bin sodir=d:\libxslt-1.1.26\bin iconv=yes zlib=yes;
 5、编辑Makefile.msvc文件,查找编译选项/OPT:NOWIN98,删除之; 
 6、在win32目录下执行>nmake /f Makefile.msvc,编译无错误后可以执行>nmake /f Makefile.msvc install将并以结果安装到预定义的目录下。
 五、libxml-python构建
 万事具备后就要开始制作libxml-python了,首先需要在zlib和libiconv上稍作手脚。
 1、修改预先编译的zlib动态库的名称,可以将zlib1.dll复制一份,然后将名称中的“1”删除,变成zlib.dll(该步骤可选,看个人爱好);
 2、复制先前编译的libiconv.dll,更名为iconv.dll,使用dumpbin工具将导出函数名重定向为文本文件,>dumpbin /exports iconv.dll >iconv.def,然后修改iconv.def文件内容,内容和格式可参考MSDN对def文件的描述;
 3、执行执行>lib /def:iconv.def /machine:386 /out:iconv.lib,至此,需要的开发包都准备完毕;
 4、修改E:\Home\libxml2-2.7.8\python目录下的setup.py,根据已准备好的路径加入iconv的iconv_includes内容,加入libxml的xml_includes内容,修改libdirs,修改ROOT定义,修改dlls,Python代码本身和文档也差不多,能一眼就看出端倪,在此仅作简述;
 5、执行python setup.py build,执行python setup.py install。

 大功告成,可以去Python下面尝试libxml的功能了,时间太急,收太快,好在目标只是做记录自己参考,但愿今后看见能回忆出细节,省得再行弯路!

你可能感兴趣的:(windows,python,api,工具,include,2010)