在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. 都是一堆鏈接錯誤,類似:
等等。
右鍵單擊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工程)
注意--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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python小程序
- 下一篇: 向量叉乘判断两向量之间是顺时针还是逆时针