本节主要讲解一下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专家全程指导