在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
aprhttp://archive.apache.org/dist/apr/1.5.0
apr-iconvhttp://archive.apache.org/dist/apr/1.2.1
apr-uti http://archive.apache.org/dist/apr/1.5.3
zlibhttp://www.zlib.net/1.2.8
sqlite-amalgamationhttp://www.sqlite.org3080301
swigwinhttp://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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员简历怎么写

说到程序员简历,这两个月,我看过不下10,000份简历。。。 答主不是HR,也不是技术负责人,但是在网站的运营工作中,每天最开心的事情就是研究候选人的简历了~~ 这些人中,有BAT的资深大牛程序员,也有…

SSM框架学习整理

一、Spring原理: 1:核心技术 Spring的两大技术要点便是,一个AOP(面向切面编程),一个IOC(控制反转),而AOP是什么呢,就好比从c语言面向过程编程—>java面向对象编程—>Spring面向切面编程…

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自…

最新版的SSM框架spring5.0搭建教程(附源码)

<p>用SSM框架已经有一段时间了&#xff0c;但都没有完整地搭建过一次工程。前段时间比较有时间就自己试着搭建了一下&#xff0c;差不多都是用的最新的spring版本了&#xff0c;然后就在这个基础上做了很多的实验测试。最近想着还是记录一下整个搭建的过程&#xff0c;以…

node.js 针对不同的请求路径(url) 做出不同的响应

边看这个边写的: http://wenku.baidu.com/link?urlC4yLe-TVH6060u_x4t34H3Ze8tjoL7HjJaKgH-TvHnEYl-T_gAMYwhmrCeM0Ji59WBPSkoEXPTWk8dPIZVpbFg_by_gN6DJNGYfjlFuYxE_ 上篇文章讲到了浏览器中访问 http://127.0.0.1:8888/ 输出 "hello world", 但是实际当中, 用户访…

MyBatis 为什么需要通用 Mapper ?

版权声明&#xff1a;版权归博主所有&#xff0c;转载请带上本文链接&#xff01;联系方式&#xff1a;abel533gmail.com https://blog.csdn.net/isea533/article/details/83045335 </div>在早期项目文档中有过类似主题的内容…

Oracle教程-安装、结构(一)

本文安装的是Oracle中的11G版本一、 将文件win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压。注意&#xff1a;这两个文件解压到同一个目录下&#xff0c;即&#xff1a;将Components目录合并到一起二、 双击“setup.exe”&#xff0c;弹出以下安装向导。去…

[041] 微信公众帐号开发教程第17篇-应用实例之智能翻译

内容概要 本篇文章为大家演示怎样在微信公众帐号上实现“智能翻译”&#xff0c;本例中翻译功能是通过调用“百度翻译API”实现的。智能翻译是指用户随意输入想要翻译的内容&#xff08;单词或句子&#xff09;&#xff0c;系统能自己主动识别用户採用的语言&#xff0c;并将其…

钉钉上手体会:阿里实用主义的野望

钉钉出自阿里之手&#xff0c;而阿里是电商出身&#xff0c;在移动办公和协同办公方面不算老司机&#xff0c;但钉钉却凭借阿里的背书声称拿下了这个市场的最大份额&#xff0c;甚至超过后面9名的总和&#xff08;数据来源为钉钉官网发布的《2018中国智能移动办公行业趋势报告》…

WAF与IPS的区别总结

谁是最佳选择&#xff1f; Web应用防护无疑是一个热门话题。由于技术的发展成熟和人们对便利性的期望越来越高&#xff0c;Web应用成为主流的业务系统载体。在Web上“安家”的关键业务系统中蕴藏的数据价值引起攻击者的青睐&#xff0c;网上流传的Web漏洞挖掘和攻击工具让攻击的…

企业微信:腾讯的“佛系”办公江湖

、 在协同办公领域&#xff0c;近几年来移动办公伴随着智能手机蓬勃发展起来&#xff0c;特别是腾讯和阿里的入场&#xff0c;改变了业内中小微市场群雄逐鹿的大混战态势&#xff0c;开启了楚汉争霸的局面。相比于钉钉强势的攻城略地&#xff0c;企业微信的“淡定”让人感觉很佛…

Eclipse安装STS插件

Eclipse安装STS插件 1、下载STS插件 地址&#xff1a;https://spring.io/tools/sts/all/ 最上面是已经安装好STS插件的Eclipse软件&#xff0c;可以点击上图红框中的“previous Spring Tool Suite™ versions”&#xff0c;查看其它版本的Eclipse。下面依次为更新文件、更新站…

TFS架构

转载http://www.biaodianfu.com/taobao-tfs.html&#xff0c;感谢原作者标点符。 一、淘宝网的困境 对于淘宝网这样的大型电子商务网站&#xff0c;对于图片服务的要求特别的高。而且对于卖家来说&#xff0c;图片远胜于文字描述&#xff0c;因此卖家也格外看重图片的显示质量、…

(转载)WebStorm 2018.3.2 激活方式(永久)亲测好用!!!!!!

转载链接&#xff1a;https://blog.csdn.net/qq_31279347/article/details/85225234 前言&#xff1a; 总觉的注册码很费事&#xff0c;过一会儿就失效了&#xff0c;博主觉得还是打补丁的方式一劳永逸&#xff0c;很简单&#xff0c;两分钟。 博主版本如下&#xff1a; 第一…

Qt 字符串QString arg()用法总结

原文&#xff1a;http://qimo601.iteye.com/blog/1420750 1、QString::arg()//用字符串变量参数依次替代字符串中最小数值 Cpp代码 QString i "iTest"; // current files number QString total "totalTest"; // number of files to pr…

SVN登录时不断弹出用户名密码输入

** svn换了地址&#xff0c;所以重新定位&#xff0c;在输入账号时&#xff0c;重复报下图&#xff0c;也没有报错&#xff0c;所以就一直无效尝试。期间什么setting clear数据&#xff0c;注册表动文件&#xff0c;搜到的差不多都试了。始终一直报图一的结果。 然后最终结果…

jqgrid 列表条件查询的几步关键操作

jqgrid列表条件查询 记录一下我自己老忘的几个点 这次记录一下使用jqgrid在列表查询时的关键点&#xff0c;过一段时间不用就是忘 1】在html页面用 v-model“q.xxx” xxx是在js处定义。 2】这是js里 在jqgrid查询列表时的模块使用postData 承载参数 3】 这是在定义vue对象时…

wireshark: there are no interfaces on which a capture can be done

权限问题&#xff0c;简单的直接sudo就行。 更安全的做法是&#xff1a; # chmod 4755 /usr/bin/dumpcap dumpcap的所在目录可用whereis命令查看。 转载于:https://www.cnblogs.com/duanguyuan/p/3628569.html

初识:windows下的免费 ssh 客户端工具

如果你的操作系统是 Windows&#xff0c;而你想要连接 Linux 服务器相互传送文件&#xff0c;那么你需要一个简称 SSH 的 Secure Shell 软件。实际上&#xff0c;SSH 是一个网络协议&#xff0c;它允许你通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算…

iOS开发之通知中心(NSNotificationCenter)

前言 面向对象的设计思想是把行为方法封装到每一个对象中&#xff0c;以用来增加代码的复用性。正是这种分散封装&#xff0c;增加了对象之间的相互关联&#xff0c;总是有很多的对象需要彼此了解以及相互操作&#xff01; 一个简单示例说明这种交互产生的对象之间的相互依赖&a…