技術(shù)總結(jié):Subversion Client API編程在Windows下進(jìn)行環(huán)境配置詳解
本節(jié)主要講解一下Windows下使用Subversion Client API編程環(huán)境配置問題,這里就向大家簡(jiǎn)單介紹一下,歡迎大家能和我一起學(xué)習(xí)Subversion Client 。
當(dāng)我把編譯subversion需要的頭文件和依賴的庫(kù)都配好時(shí),編譯能通過,鏈接卻總有問題。當(dāng)時(shí)想找篇使用subversionclientapi編程的指導(dǎo)文檔,好難,網(wǎng)上的相關(guān)文章很少,周圍的人也都不熟悉subversion,摸索了一個(gè)多周,總算邁出最艱難的***步。小結(jié)一下,希望各位大蝦不吝賜教。
當(dāng)時(shí)我的Subversion Client API環(huán)境如下:
[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
[必須的頭文件和靜態(tài)庫(kù)]??
1)subversion自身API頭文件和靜態(tài)庫(kù):
http://subversion.tigris.org/downloads/svn-win32-1.4.2_dev.zip?
2)subversion依賴的頭文件和庫(kù):
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動(dòng)態(tài)鏈接庫(kù)的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,結(jié)果鏈接的時(shí)候有如下錯(cuò)誤:
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
就是這個(gè)困擾我很久,后來(lái)經(jīng)老張幫助才查到,SHGetFolderPath是Windwos動(dòng)態(tài)鏈接庫(kù)shell32.dll的一個(gè)函數(shù)。MSDN2005對(duì)這個(gè)函數(shù)有如下注釋:
- 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 環(huán)境配置時(shí)還有一點(diǎn)需要注意:??
需要在VC的"projectsetting"對(duì)話框-〉"C/C++"選項(xiàng)-〉"UseruntimeLibrary"下拉菜單中選擇"DebugMultithreadedDll";也就是相當(dāng)于將ProjectOptions的第二個(gè)參數(shù)改為/MDd。否則會(huì)出現(xiàn)下面的錯(cuò)誤:
- 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!現(xiàn)在從http://svn.collab.net/repos/svn/tags/1.3.2/tools/examples/下載minimal_client.c(一個(gè)小的subversionclientapi演示程序)就能編譯運(yùn)行了。本節(jié)Windows下使用Subversion Client API編程環(huán)境配置 到這里講解完畢。
【編輯推薦】
- 三大主流Subversion客戶端初探
- Subversion客戶端使用詳解
- 技術(shù)指導(dǎo):詳解Tortoise Subversion客戶端使用方法 上篇
- 技術(shù)指導(dǎo):詳解Tortoise Subversion客戶端使用方法 下篇
- MyEclipse下配置SVN專家全程指導(dǎo)