• 在Windows 7 x64 上编译libsvn


    这几天由于工作需要,需要Windows上Python 2.7 x64对应的svn模块。Win32版本可以从这个页面直接下载 http://sourceforge.net/projects/win32svn
    x64的无奈只有自己编译了。

    在这个过程中还是费了一些力气,在Linux上可以直接make,在Windows使用Visual Studio来管理工程,不过有一些工程并没有及时更新,因此会遇到一些莫名其妙的问题。在这里就把这个过程中遇到的问题总结一下,将来可以省点力气。

    一、    准备工作
    1.    首先需要下一些代码。

    名称 下载页面 当前版本
    Subversion   http://subversion.apache.org/download/ 1.8.8
    apr http://archive.apache.org/dist/apr/ 1.5.0
    apr-iconv http://archive.apache.org/dist/apr/ 1.2.1
    apr-uti http://archive.apache.org/dist/apr/ 1.5.3
    zlib http://www.zlib.net/ 1.2.8
    sqlite-amalgamation http://www.sqlite.org 3080301
    swigwin http://sourceforge.net/projects/swig/files/swigwin/ 2.0.12

    注:apr, apr-iconv, apr-util 从同一个页面下载,一定要选择名字上带“-win32”的文件,如apr-1.5.0-win32-src.zip, apr-iconv-1.2.1-win32-src.zip, apr-util-1.5.3-win32-src.zip
    2.    将上面的代码解压后放到同一个目录下面,如C:\Temp。如下面的样子:

    目录名字上都删去了版本号,这样做有好处,下面会看到。
    3.    编译apr, apr-iconv, apr-util. 进入apr-util的目录,双击aprutil.dsw,你用的Visual Studio版本应该比VC6更高,按照提示转换成对应版本的工程即可。
    Apr-util这个工程已经把apr工程包括进来了,只要你目录的名字是“apr”并且“apr”和“apr-util”在同一级目录下面(就像上面看到的样子)。
    完成之后,可以看到里面有27个工程,这些我们不必全部编译,按以下顺序执行。我们可以把工程配置选择为Release,平台选择为x64了。
    (1)    编译aprutil(在工程上右键单击,选择“Build”),不应该遇到问题,生成5个文件:C:\Temp\apr\x64\LibR\apr-1.lib
    C:\Temp\apr-util\xml\expat\lib\x64\LibR\xml.lib
    C:\Temp\apr-iconv\x64\LibR\apriconv-1.lib
    C:\Temp\apr\x64\LibR\aprapp-1.lib
    C:\Temp\apr-util\x64\LibR\aprutil-1.lib
    (2)    编译libaprutil(在工程上右键单击,选择“Build”)。此时有2个工程失败,分别是 libapriconv和libaprutil. 都是一堆链接错误,类似:

    iconv_module.obj : error LNK2019: unresolved external symbol __imp_apr_stat referenced in function iconv_getpathname
    iconv_module.obj : error LNK2019: unresolved external symbol __imp_apr_snprintf referenced in function iconv_getpathname
    iconv_module.obj : error LNK2019: unresolved external symbol __imp_apr_pool_destroy referenced in function iconv_getpath

    等等。
    右键单击libapriconv,选择属性(Properties),在属性对话框中:
    a)    选择 Configuration Properties -> C/C++ -> Preprocessor ,右侧的 Preprocessor Definitions 增加一个宏 APR_DECLARE_STATIC;
    b)    选择 Configuration Properties -> Linker -> General,右侧的 Additional Library Directories增加一个路径 C:\Temp\apr\x64\LibR;
    c)    选择 Configuration Properties -> Linker -> Input,右侧的 Additional Dependencies增加两个静态库 ws2_32.lib和apr-1.lib;
    类似的,对libaprutil工程增加宏(API_DECLARE_STATIC, APR_DECLARE_STATIC),增加附加库路径(C:\Temp\apr\x64\LibR, C:\Temp\apr-util\xml\expat\lib\x64\LibR, C:\Temp\apr-iconv\x64\LibR, C:\Temp\apr-util\x64\LibR),增加附加库(Rpcrt4.lib, apr-1.lib, apriconv-1.lib, aprutil-1.lib, xml.lib)
    (3)    对 libaprutil 重新编译即可。
    (4)    为了方便subversion的使用,我们将编译好的*.lib文件放到Release目录下面。
    a)    将 C:\Temp\apr\x64\Release\*.lib 放到 C:\Temp\apr\Release 下
    b)    将 C:\Temp\apr-util\x64\Release\*.lib 放到 C:\Temp\apr-util\Release 下
    c)    将 C:\Temp\apr-util\xml\expat\lib\x64\LibR\*.lib 放到 C:\Temp\apr-util\Release 下
    d)    将 C:\Temp\apr-iconv\x64\Release\*.lib 放到 C:\Temp\apr-iconv\Release 下
    4.    编译subversion,在这里我们需要的是swig python bindings(终于进入正题)。
    (1)    进入 subversion 目录,运行下面的命令(目的是生成vcproj工程)

    Python gen-make.py -t vcproj --vsnet-version=2010 --with-swig=C:\Temp\swigwin --with-zlib=C:\temp\zlib --with-apr=C:\Temp\apr --with-apr-util=C:\Temp\apr-util --with-apr-iconv=C:\Temp\apr-iconv --with-sqlite= C:\Temp\sqlite-amalgamation

    注意--vsnet-version,填写你的Visual Studio的版本,这里我用的是2010. 其他的目录填写绝对路径。
    (2)    在这个目录下面生成一个subversion_vcnet.sln,打开,将配置改为Release,平台改为x64。
    5.    选择__SWIG_PYTHON__ 进行编译,共编译31个工程,全部成功。(如果libsvn_subr_dll和libsvn_delta_dll失败,是由于zlib编译非64位的版本,重新编译zlib即可。)
    6.    至此,编译工作结束,下面可以把编译生成的文件复制出来了。我们假设放到C:\Temp\svnpy下面。
    (1)    在svnpy下面新建目录svn,把C:\Temp\subversion\subversion\bindings\swig\python\svn下面的*.py文件都复制C:\Temp\svnpy\svn下面。
    (2)    在svnpy下面新建目录libsvn,把C:\Temp\subversion\Release\subversion\bindings\swig\python 下面的*.pyd文件都复制到C:\Temp\svnpy\libsvn下面。
    (3)    在C:\Temp\subversion\Release\subversion下搜索所有的.dll文件,都复制到C:\Temp\svnpy\libsvn下面。(共有9个,libsvn_client-1.dll, libsvn_delta-1.dll, libsvn_diff-1.dll, libsvn_fs-1.dll, libsvn_ra-1.dll, libsvn_repos-1.dll, libsvn_subr-1.dll, libsvn_swig_py-1.dll, libsvn_wc-1.dll)
    (4)    把C:\Temp\subversion\subversion\bindings\swig\python下面所有的*.py文件都复制到C:\Temp\svnpy\libsvn下面。
    (5)    把第3步编译生成的3个dll复制到C:\Temp\svnpy\libsvn(分别是libapr-1.dll, libapriconv-1.dll, libaprutil-1.dll,在对应的文件夹下面的x64\Release下面找就可以了)。
    7.    测试一下,看是否可以被Python导入:


    参考
    Compiling Subversion Python bindings on Windows
    http://www.lejordet.com/2009/03/compiling-subversion-python-bindings-on-windows/

  • 相关阅读:
    远程发送和接收数据流生成图片
    iTextSharp 设置 PDF 所有页面背景图功能
    iTextSharp 生成 PDF 问题集合
    C# 中 IL/MSIL , CTS , CLS , CLR , JIT 分别是什么 ?
    django创建项目2 jojo
    selenium键盘操作 jojo
    python格式化 jojo
    安装了Django后,执行djangoadmin.py无法创建工程的解决办法 jojo
    django创建项目1 jojo
    python自带模块模拟鼠标和键盘操作 jojo
  • 原文地址:https://www.cnblogs.com/zhangbaoqiang/p/3574109.html
Copyright © 2020-2023  润新知