Win32平台下编译SVN源码全过程
2010年10月07日
前段时间曾经总结过一些在win32平台下基于SVN开发的一些注意事项,主要是在利用svn官方发布的二进制库进行开发过程中使用的方法和一些值得注意的问题。
由于svn官方发布的win32平台下的二进制文件是基于vc6编译的,在使用vc2005进行开发时,会遇到因CRT冲突而引起的link错误。因此,如果是使用vc2005(我推测使用VC2003也会遇到同样的问题,尚未验证)附带的CRT库与svn官方发布的binary进行link,那么无论如何都会出现crash的问题。最为彻底的解决方案,还是自行编译svn源码。
在win32下编译svn源码说明:
首先需要从官方下载一份SVN源码,版本可以根据需要选取,比如最新的Release 1.6.3(目前已经更新到1.6.6)可以在这个地址下载到:
http://subversion.tigris.org/downloads/subversion- 1.6.3.zip
以及svn所需的依赖包:
http://subversion.tigris.org/downloads/subversion- deps-1.6.3.zip
如果需要支持ssl的话,还需要下载openssl(根据实际需要选择相应版本):
http://www.openssl.org/source/
如果需要BerkeleyDB的话,需要下载WindowsBDB(BDB是可选的,如果不使用BDB,则默认使用FSFS):
http://subversion.tigris.org/servlets/ProjectDocum entList?folderID=688&expandFolder=688&folderID=2627
此外还有Windows libintl:
http://subversion.tigris.org/servlets/ProjectDocum entList?folderID=2627&expandFolder=2627&folderID=81 00
解压svn源码包,可以在subversion-1.6.3目录中找到这么一个官方发布的说明文件INSTALL。该文件详述了安装通过源码编译SVN所需依赖的工具及第三方库,并且给出了详细的步骤。
网上同样有一个INSTALL的说明,可以在这里访问到:
http://svn.collab.net/repos/svn/trunk/INSTALL
编译开源项目的话,其附带的INSTALL说明都是最重要也是最全面的参考。网上搜索的其他资料,也会有相应的参考价值,但无论如何,其信息的来源也是INSTALL。因此编译开源项目时,认真阅读INSTALL是最重要且效率最高的。
从Google上进行一下简单的搜索的话,可以找到一篇介绍svn源码编译的文章,在这里:http://rocksun.cn/?p=103
为了后续的步骤方便,我们需要先准备编译所必须的一些东西:
包括Perl:http://www.activestate.com/activeperl/
Python:http://www.python.org/download/
安装Python以及Perl,比如分别安装到D:\Python26以及D:\Perl。安装好之后,将python以及perl的bin目录设为系统目录并重新启动使之生效。
编译svn源码第一步,将下载的svn源码包解压到X:\SVN\svn-trunk下。X可以是任意一个盘符。在我的机器上,我使用了F盘,下文中皆以F盘举例。
在F:\SVN\svn-trunk中解压了刚才下载的svn源码包以及依赖之后,可以在目录
F:\SVN\src-trunk\subversion-1.6.3中看到以下文件及目录:
以及文件:
Svn的编译需要依赖libapr以及libapr-util,SQLite,zlib,libintl可选,libneon/libserf二则择一,openssl可选,BerkeleyDB可选,libsasl可选,对Python,Perl,Java,Ruby支持的模块可选,以及KDELibs,GNOME Keyring可选。
我们依次先编译依赖项:首先进入到subversion-1.6.3\apr目录中。可以看到存在apr.dsw以及apr.dsp文件,这是VC6的工程文件。我们如果想在2005下编译的话,需要将其转换成sln及vcproj文件,简单的用vc2005打开该文件并保存即可。该目录下还有Makefile.win文件,是win下的makefile,我们打开makefile.win文件查看一下说明:可以得知如果需要编译.sln文件的话,需要置USESLN=1。
在VC2005的命令行中输入nmake -f makefile.win buildall checkall USESLN=1便可以开始编译apr了。Checkall表示编译完成后会去运行所有的测试用例。
编译完成后,当前目录下会多出2个文件夹,分别是LibR StaticRelease,Release DllRelease。如果选择Debug编译,则会生成LibD StaticDebug, Debug DllDebug。
类似的,我们将apr-util以及apr-iconv也编译好。
编译zlib:
进入zlib目录后,使用以下命令编译zlib库
nmake -f win32/Makefile.msc
编译openssl:
将此前下载的openssl解压到F:\SVN\openssl
阅读其INSTALL文档(INSTALL.W32)
使用VC编译openssl首先需要运行configure:
perl Configure VC-WIN32
接着运行
ms\do_masm
这里的do_masm是一个bat脚本,该脚本会生成nt.mak以及ntdll.mak分别是Release版本的静态和动态的库的make文件。如果想生成debug版本的make文件,可以通过修改do_masm.bat中的调用mk1mf.pl脚本处的参数实现,具体参数可以参考mk1mf.pl文件自身的说明。
接下来,创建动态链接库版本的ssl库用nmake -f ms\ntdll.mak,以及静态版本使用:nmake -f ms\nt.mak
生成的结果文件位于out32dll文件夹,以及out32文件夹中。
编译neon
进入F:\SVN\src-trunk\subversion-1.6.3\neon目录
nmake f neon.mak
默认生成的是release版的libneon.lib (debug版为libneonD.lib)
可以用nmake f neon.mak DEBUG_BUILD=1生成debug版的lib。
回到F:\SVN\src-trunk\subversion-1.6.3
运行python gen-make.py help可以了解如何使用gen-make.py生成我们所需的svn编译文件。
由于在此,我打算选用neon, libintl, openssl(本例中并不打算使用BDB,如果需要BDB则需要增加-with-berkeley-db=DIR参数)进行编译,目前需要关注的几个重要参数如下:
with-apr=DIR
with-apr-util=DIR
with-apr-iconv=DIR
with-neon=DIR
with-libintl=DIR
with-openssl=DIR
with-zlib=DIR vsnet-version=VER 运行 F:\SVN\src-trunk\subversion-1.6.3>python gen-make.py -t vcproj with-apr=apr with-apr-iconv=apr-iconv with-apr-util=apr-util with-libintl=svn-win32-libintl with-openssl=..\..\openssl with-zlib=zlib vsnet-version=2005 (其中的libintl需要解压到当前文件夹中)
即可生成vc2005的sln(subversion_vcnet.sln)文件了。
打开vc2005,选择Debug编译选项,对项目ALL进行编译。如果一切顺利,则会生成一个F:\SVN\src-trunk\subversion-1.6.3\Debug目录。内容包括svn的所有的lib及可执行文件。
将svn\svn.exe以及所有目录下的.dll文件拷贝到一个新建的bin目录下。将openssl的dll,apr, apr-util, apr-iconv的dll拷贝到同样的bin目录下,如下图:
运行svn version看看结果吧~
最后,当我们有了自行编译的svn可以做什么?你可以做任何你想做的事--比如自己基于svn的接口进行开发(可以参考开源项目rapidsvn以及TortoiseSVN的源码)
发表评论
-
使用 CMake 进行跨平台软件开发
2012-01-20 09:42 1009使用 CMake 进行跨平台软 ... -
IronPython:交互式解释器与常用函数
2012-01-20 09:42 795IronPython:交互式解释器 ... -
Boost在VS2008下的正确编译
2012-01-20 09:42 1071Boost在VS2008下的正确编译 2010年11月28日 ... -
《Qt for Symbian》翻译系列之六:第一章 简介与写作初衷
2012-01-20 09:42 870《Qt for Symbian》翻译系列之六:第一章 简介与写 ... -
激励口号
2012-01-19 14:47 659激励口号 2011年02月16日 ... -
团队精神训练团队口号精神口号团队心声营销口号知道口碑营销
2012-01-19 14:47 1350团队精神训练团队口号 ... -
团队口号_激励口号_口号大全分享到:
2012-01-19 14:47 1178团队口号_激励口号_口 ... -
团队口号|营销团队励志口号大全
2012-01-19 14:46 2836团队口号|营销团队励志口号大全 2011年09月09日 ... -
销售口号
2012-01-19 14:46 843销售口号 2010年11月12日 团队精神训练团队口号精 ... -
VB中实现系统托盘图标实例
2012-01-17 04:31 617VB中实现系统托盘图标实例 2011年04月19日 新建 ... -
SubClassWindow,SubClassDlgItem
2012-01-17 04:31 666SubClassWindow,SubClassDlgItem ... -
使用Setwindowlong和Callwindowproc这两个Api函数[转的]
2012-01-17 04:31 1962使用Setwindowlong和Callwindo ... -
钩子程序解释说明都要注意小心钩子哦
2012-01-17 04:31 747钩子程序解释说明都要 ... -
windows消息机制
2012-01-17 04:31 607windows消息机制 2011年04月21日 一 W ... -
(转载)温州人生意经
2012-01-16 03:21 537(转载)温州人生意经 2010年05月03日 温州人生意 ... -
温州人生意经
2012-01-16 03:21 580温州人生意经 2010年07月04日 “有市场的地方就有 ...
相关推荐
SVN win32 中文版,先安装SVN包,再安装语言包
将文件解压缩到 C:\ 下,将解压缩后的 svn-win32-1.7.2 文件夹名改为 svn,然后将 C:\svn\bin 加入到系统的 PATH 环境变量中,即可开始使用。 将 svnserve.exe 设置为系统服务: sc create svn binpath= "C:\svn\...
“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏...
Win32SVN 1.7版本
TortoiseSVN-1.10.1.28295-win32-win64-svn-1.10.2TortoiseSVN-1.10.1.28295-win32-win64-svn-1.10.2TortoiseSVN-1.10.1.28295-win32-win64-svn-1.10.2TortoiseSVN-1.10.1.28295-win32-win64-svn-1.10.2TortoiseSVN-...
SVN源代码泄露全版本Dump源码
银河麒麟 源码编译SVN 支持 HTTPS HTTP 所需要的源码包
将文件解压缩到 C:\ 下,将解压缩后的 svn-win32-1.7.0 文件夹名改为 svn,然后将 C:\svn\bin 加入到系统的 PATH 环境变量中,即可开始使用。 将 svnserve.exe 设置为系统服务: sc create svn binpath= "C:\svn\...
“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏...
svn1.6.16版本源码下载,支持vs2008编译,如需要其它版本可在svn官网下载
TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi svn客服端安装程序
自己整理的编译环境搭建,原来可以这么简单,ubuntu10.04,svn1.7,包括u盘安装ubuntu系统
SVNMerge源代码SVNMerge源代码SVNMerge源代码
软件开发版本控制工具:SVN客户端(TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.rar)
SVN最新版 TortoiseSVN-1.4.5.10425-win32-svn-1.4.5.msi
svn自动编译安装脚本,脚本分2部分 atuo_svn.sh 是编译安装svn make_svn.sh是自动安装一个指定的库
SVN的可视化客户的绿色免安装TortoiseSVN-1.6.1.16129-win32-svn-1.6.1
在Windows环境下的svn安装及配置说明,可以协助团队开发,方便进行文件、代码的管理。使用起来十分方便。。。
SVN 1.8.5 WIN32 客户端 SVN 1.8.5 WIN32 客户端中文包