技術總結:Subversion Client API編程在Windows下進行環境配置詳解
本節主要講解一下Windows下使用Subversion Client API編程環境配置問題,這里就向大家簡單介紹一下,歡迎大家能和我一起學習Subversion Client 。
當我把編譯subversion需要的頭文件和依賴的庫都配好時,編譯能通過,鏈接卻總有問題。當時想找篇使用subversionclientapi編程的指導文檔,好難,網上的相關文章很少,周圍的人也都不熟悉subversion,摸索了一個多周,總算邁出最艱難的***步。小結一下,希望各位大蝦不吝賜教。
當時我的Subversion Client API環境如下:
[OS]
WindowsXPProfessional版本2002ServicePack2
[IDE]
VisualC++6.0?
[Subversion1.4.2]
http://subversion.tigris.org/downloads/subversion-1.4.2.zip
[TortoiseSVN1.4.1]
http://nchc.dl.sourceforge.net/s...win32-svn-1.4.2.msi
[必須的頭文件和靜態庫]??
1)subversion自身API頭文件和靜態庫:
http://subversion.tigris.org/downloads/svn-win32-1.4.2_dev.zip?
2)subversion依賴的頭文件和庫:
http://subversion.tigris.org/downloads/subversion-deps-1.4.2.zip
http://subversion.tigris.org/fil...n-win32-libintl.zip??
http://subversion.tigris.org/fil...db-4.4.20-win32.zip
[需要加入vc動態鏈接庫的lib文件]??
- ibsvn_client-1.lib
- libsvn_delta-1.lib
- libsvn_diff-1.lib
- libsvn_fs-1.lib
- libsvn_fs_base-1.lib
- libsvn_fs_fs-1.lib
- libsvn_ra-1.lib
- libsvn_ra_dav-1.lib
- libsvn_ra_local-1.lib?
- libsvn_ra_svn-1.lib
- libsvn_repos-1.lib
- libsvn_subr-1.lib
- libsvn_wc-1.lib
- libapr.lib
- libaprutil.lib
- xml.lib
- libneon.lib
- intl3_svn.lib
- libdb44s.lib
- WS2_32.Lib
- shfolder.lib
注意:起初我沒有加入shfolder.lib,結果鏈接的時候有如下錯誤:
libsvn_subr-1.lib(config_win.obj):errorLNK2001:unresolvedexternalsymbol__imp__SHGetFolderPathA@20??
libsvn_subr-1.lib(config_win.obj):errorLNK2001:unresolvedexternalsymbol__imp__SHGetFolderPathW@20?
Debug/mini_client.exe:fatalerrorLNK1120:2unresolvedexternals
就是這個困擾我很久,后來經老張幫助才查到,SHGetFolderPath是Windwos動態鏈接庫shell32.dll的一個函數。MSDN2005對這個函數有如下注釋:
- ThisfunctionisasupersetofSHGetSpecialFolderPath,includedwithearlierversionsoftheShell.OnsystemspreceedingthoseincludingShell32.dllversion5.0(WindowsMillenniumEdition(WindowsMe)andWindows2000),SHGetFolderPathwasobtainedthroughSHFolder.dll,distributedwithMicrosoftInternetExplorer4.0andlaterversions.SHFolder.
- dllalwayscallsthecurrentplatform'sversionofthisfunction.Ifthatfails,itwilltrytosimulatetheappropriatebehavior.SHFolder.dllcontinuestobeincludedforbackwardcompatibility,thoughthefunctionisnowimplementedinShell32.dll.?
- NoteOnoldersystemsthatrequiretheredistributableSHFolder.dll,youmustexplicitlylinktoSHFolder.libbeforeyoulinktoShell32.lib.
這就是為什么必須要加入shfolder.lib的原因了。
Subversion Client 環境配置時還有一點需要注意:??
需要在VC的"projectsetting"對話框-〉"C/C++"選項-〉"UseruntimeLibrary"下拉菜單中選擇"DebugMultithreadedDll";也就是相當于將ProjectOptions的第二個參數改為/MDd。否則會出現下面的錯誤:
- Linking...??
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:_strncmpalreadydefinedinLIBC.lib(strncmp.obj)??
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:_freealreadydefinedinLIBC.lib(free.obj)??
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:_strchralreadydefinedinLIBC.lib(strchr.obj)??
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:_callocalreadydefinedinLIBC.lib(calloc.obj)?
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:_mallocalreadydefinedinLIBC.lib(malloc.obj)??
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:__closealreadydefinedinLIBC.lib(close.obj)?…...
- MSVCRT.lib(MSVCRT.dll):errorLNK2005:__writealreadydefinedinLIBC.lib(write.obj)?
- LINK:warningLNK4098:defaultlib"MSVCRT"conflictswithuseofotherlibs;use/NODEFAULTLIB:library??
- Debug/mini_client.exe:fatalerrorLNK1169:oneormoremultiplydefinedsymbolsfound??
- Errorexecutinglink.exe.
OK!現在從http://svn.collab.net/repos/svn/tags/1.3.2/tools/examples/下載minimal_client.c(一個小的subversionclientapi演示程序)就能編譯運行了。本節Windows下使用Subversion Client API編程環境配置 到這里講解完畢。
【編輯推薦】
- 三大主流Subversion客戶端初探
- Subversion客戶端使用詳解
- 技術指導:詳解Tortoise Subversion客戶端使用方法 上篇
- 技術指導:詳解Tortoise Subversion客戶端使用方法 下篇
- MyEclipse下配置SVN專家全程指導