在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/
转载于:https://www.cnblogs.com/zhangbaoqiang/p/3574109.html
在Windows 7 x64 上编译libsvn相关推荐
- openh264 Windows 平台x64版本编译
需求Windows x64支持h264编码的视频 pjsip如果需要支持h264编码格式的视频,需要引入openh264. openh264源码下载 https://github.com/cisco/ ...
- 在Windows和Linux上编译gRPC源码操作步骤(C++)
gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...
- Windows 7 X64平台编译LLVM+clang
1 源码包 去LLVM官方网站下载最新的源码,Windows平台下载三个即可(2019.04.24版本为LLVM 8.0.0): LLVM source code (.sig) Clang sourc ...
- 在Ubuntu X64上编译Hadoop
在之前的文章中介绍了如何直接在Ubuntu中安装Hadoop.但是对于64位的Ubuntu来说,官方给出的Hadoop包是32位的,运行时会得到警告: WARN util.NativeCodeLoad ...
- 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 ...
- hadoop入门-在windows上编译x64位hadoop
环境 Windows 7 x64位,visual studio 2010 professional hadoop 源码版本2.2.0 步骤(来源于书<Pro Apache Hadoop, Sec ...
- 在Windows上编译FreeRDP
在Windows上编译FreeRDP FreeRDP是RDP协议的一个开源实现,像mstsc远程桌面也是RDP协议的一个实现微软把它预装在Windows系统中.今天我们就讲下如何在Windows下编译 ...
- 其他笔记 - Mono for Windows 跨平台 Runtime 在Win10上编译和安装
目录 在Windows上编译Mono 安装环境 下载Mono源码 预配置编译安装说明 详细的编译说明 启用BTLS作为Windows构建的加密后端 为Windows版本启用LLVM 使用monolit ...
- 手把手教你在Windows上编译Swift工具链
2020/5/27更新:大家现在可以直接从Saleem Abdulrasool的Azure Pipeline中下载打包好的Swift Windows SDK了,在他的GitHub中找到swift-bu ...
最新文章
- Linux下kvm宿主机死机,看到一些朋友苦虚拟机久矣,分享下我使用KVM的一些经验和技巧...
- 微信小微商户获取申请状态
- C++中class与struct的区别
- Redis中的zset 有序集合
- ue4集合类型_UE4粒子系统渲染管线概述
- 超越MobileNet v3!华为诺亚、北大提出GhostNet​,使用线性变换生成特征图
- Python_模块Module
- 【ElasticSearch】Es 源码之 Transport 和 TransportService 源码解读
- 刷卡读取信息自动录入表格_人事自动化管理系统.xls
- loadrunner 商城项目随机选书
- ViewDragHelper详解
- thinkphp去重,distinct、group
- C++ - Opencv模板匹配与块匹配
- win10 java8 环境变量_win10下安装JDK8和环境变量配置
- JavaScript函数和BOM及DOM编程(详细总结-无尿点)
- UI网页设计制作思路
- 仁兄:腾讯区块链学习后的一些粗浅观点
- seamless kernel updates
- 关于linux中cron.daily、weekly、monthly执行时间的问题?
- QQ聊天记录快速迁移
热门文章
- linux下usb驱动配置文件,Linux环境下USB的原理、驱动和配置
- linux 开启关闭tomcat服务器端口,linux系统安装、启动和关闭tomcat
- 基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
- HTML+CSS+JS实现 ❤️CSS3图片遮罩高亮显示❤️
- ORACLE 12C采坑之 ORA-12541:TNS:无监听程序
- 修复计算机的英语,Windows Repair最新版
- datagrid底部显示水平滚动_看完《惊奇队长》等彩蛋,我想到了一个制作PPT滚动字幕的方法...
- php连接mysql开发环境_PHP开发环境搭建及常用的数据库操作
- mysql timestamp排序_对多个表进行排序MYSQL TimeStamp
- 乘法口诀表编程php视频,PHP学习之制作乘法口诀表