这几天由于工作需要,需要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/

转载于:https://www.cnblogs.com/zhangbaoqiang/p/3574109.html

在Windows 7 x64 上编译libsvn相关推荐

  1. openh264 Windows 平台x64版本编译

    需求Windows x64支持h264编码的视频 pjsip如果需要支持h264编码格式的视频,需要引入openh264. openh264源码下载 https://github.com/cisco/ ...

  2. 在Windows和Linux上编译gRPC源码操作步骤(C++)

    gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...

  3. Windows 7 X64平台编译LLVM+clang

    1 源码包 去LLVM官方网站下载最新的源码,Windows平台下载三个即可(2019.04.24版本为LLVM 8.0.0): LLVM source code (.sig) Clang sourc ...

  4. 在Ubuntu X64上编译Hadoop

    在之前的文章中介绍了如何直接在Ubuntu中安装Hadoop.但是对于64位的Ubuntu来说,官方给出的Hadoop包是32位的,运行时会得到警告: WARN util.NativeCodeLoad ...

  5. python3.7.4安装教程桌面_Python 3.4在Windows 7 x64上安装psutil

    我正在尝试从Python 3.4的源psutil 2.1.0安装.我的操作系统是Windows7x64.我收到错误:c:\Python34\psutil-2.1.0>python setup.p ...

  6. hadoop入门-在windows上编译x64位hadoop

    环境 Windows 7 x64位,visual studio 2010 professional hadoop 源码版本2.2.0 步骤(来源于书<Pro Apache Hadoop, Sec ...

  7. 在Windows上编译FreeRDP

    在Windows上编译FreeRDP FreeRDP是RDP协议的一个开源实现,像mstsc远程桌面也是RDP协议的一个实现微软把它预装在Windows系统中.今天我们就讲下如何在Windows下编译 ...

  8. 其他笔记 - Mono for Windows 跨平台 Runtime 在Win10上编译和安装

    目录 在Windows上编译Mono 安装环境 下载Mono源码 预配置编译安装说明 详细的编译说明 启用BTLS作为Windows构建的加密后端 为Windows版本启用LLVM 使用monolit ...

  9. 手把手教你在Windows上编译Swift工具链

    2020/5/27更新:大家现在可以直接从Saleem Abdulrasool的Azure Pipeline中下载打包好的Swift Windows SDK了,在他的GitHub中找到swift-bu ...

最新文章

  1. Linux下kvm宿主机死机,看到一些朋友苦虚拟机久矣,分享下我使用KVM的一些经验和技巧...
  2. 微信小微商户获取申请状态
  3. C++中class与struct的区别
  4. Redis中的zset 有序集合
  5. ue4集合类型_UE4粒子系统渲染管线概述
  6. 超越MobileNet v3!华为诺亚、北大提出GhostNet​,使用线性变换生成特征图
  7. Python_模块Module
  8. 【ElasticSearch】Es 源码之 Transport 和 TransportService 源码解读
  9. 刷卡读取信息自动录入表格_人事自动化管理系统.xls
  10. loadrunner 商城项目随机选书
  11. ViewDragHelper详解
  12. thinkphp去重,distinct、group
  13. C++ - Opencv模板匹配与块匹配
  14. win10 java8 环境变量_win10下安装JDK8和环境变量配置
  15. JavaScript函数和BOM及DOM编程(详细总结-无尿点)
  16. UI网页设计制作思路
  17. 仁兄:腾讯区块链学习后的一些粗浅观点
  18. seamless kernel updates
  19. 关于linux中cron.daily、weekly、monthly执行时间的问题?
  20. QQ聊天记录快速迁移

热门文章

  1. linux下usb驱动配置文件,Linux环境下USB的原理、驱动和配置
  2. linux 开启关闭tomcat服务器端口,linux系统安装、启动和关闭tomcat
  3. 基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
  4. HTML+CSS+JS实现 ❤️CSS3图片遮罩高亮显示❤️
  5. ORACLE 12C采坑之 ORA-12541:TNS:无监听程序
  6. 修复计算机的英语,Windows Repair最新版
  7. datagrid底部显示水平滚动_看完《惊奇队长》等彩蛋,我想到了一个制作PPT滚动字幕的方法...
  8. php连接mysql开发环境_PHP开发环境搭建及常用的数据库操作
  9. mysql timestamp排序_对多个表进行排序MYSQL TimeStamp
  10. 乘法口诀表编程php视频,PHP学习之制作乘法口诀表