启动apache的时候提示 mod_dev_svn.so出错
1. 使用Dependency Walker,将mod_dav_svn.so所关联的所有动态库全部找出来,收集到一个目录下,包括 mod_dav.so libhttpd.dll libapr.dll libaprutil.dll libapriconv.dll (从 apache\bin 目录拷贝) libdb43.dll intl3_svn.dll ssleay32.dll libeay32.dll (从 svn-win32-1.3.2\bin 目录拷贝) 共9个动态库,放在 modules\svn 目录下,然后修改 apache2\conf\httpd.conf文件 LoadModule dav_svn_module modules/svn/mod_dav_svn.so ,终于成功启动apache 的 services 2. 给 httpd.conf 添加如下指令,重启 apache 失败 <Location /svn> DAV svn SVNParentPath d:\svn_repository AuthType Basic AuthName "my Subversion Server" AuthUserFile d:\svn_repository\passwd.conf AuthzSVNAccessFile d:\svn_repository\authz.conf Require valid-user </Location> 3. 将 LoadModule authz_svn_module modules/svn/mod_authz_svn.so 加入配置,并将mod_authz_svn.so 拷贝入 modules\svn 目录, 再次启动 services 成功 4. 将 LoadModule dav_svn_module modules/svn/mod_dav_svn.so LoadModule authz_svn_module modules/svn/mod_authz_svn.so 改成 LoadModule dav_svn_module "D:\Program Files\svn-win32-1.3.2\bin\mod_dav_svn.so" LoadModule authz_svn_module "D:\Program Files\svn-win32-1.3.2\bin\mod_authz_svn.so" 重启 apache services 成功。至此,一切顺利,而昨晚出现的问题并没有重现。不死心,继续试验。 5. 设置 LoadModule dav_svn_module modules/svn/mod_dav_svn.so LoadModule authz_svn_module modules/svn/mod_authz_svn.so 但是,将libapr.dll libaprutil.dll libapriconv.dll 三个动态库从 svn-win32-1.3.2\bin 目录拷贝过来覆盖,结果还是成功启动apache 认真查看昨晚留下的痕迹,发现原目录没有 intl3_svn.dll 文件。于是准备继续试验 6. 删除 modules\svn 目录下的 intl3_svn.dll,打开dos窗口用 path=%path%;"D:\Program Files\svn-win32-1.3.2\bin" 命令将 D:\Program Files\svn-win32-1.3.2\bin 目录加入本dos窗体的临时 path 内,然后打开dos窗口执行 apache,失败 7. 打开“我的电脑”属性,选“高级”下面的“环境变量”,将系统变量中path内,加入上述内容。然后打开dos窗口执行 apache,哈,成功了。接着启动 apache services ,果然,失败!! 【总结】 1. 在以应用程序模式启动apache的时候,其搜索动态库的路径,与以services方式启动时候的搜索路径不一样。以应用程序模式启动时,其搜索路径为 动态库本地目录-->apache\bin目录-->系统path 而以windows services模式启动时,其搜索路径只有前两项,没有第三项。 所以当你将 subversion\bin 目录设置入系统的环境变量,而没有将相关几个动态库放在apache关联目录下的时候,就会出现apache services启动失败而apache applichation启动成功的情况。 【注:本结论仅适用于将 svn-win32-1.3.2.zip 预编译包解压后就直接使用的情况。对于使用 svn-1.3.2-setup.exe 安装包正规安装的用户,本结论也许不适合。】 2. 当apache抱怨说无法启动,或者无法加载某个动态库的时候,一般先检查该动态库的关联情况。 【结束语】 借用 Subversion FAQ 上面的一段话做结束语: The error message in this case is a little misleading. Most likely Apache is unable to load one or more DLLs that mod_dav_svn.so relies on. If Apache is running as a service it will not have the same PATH as a regular user. Make sure that libdb4*.dll, libeay32.dll and ssleay32.dll are present in either \Apache\bin or \Apache\modules. You can copy them from your Subversion installation directory if they are not there. If this still does not resolve the problem, you should use a tool like Dependency Walker on mod_dav_svn.so to see if there are any other unresolved dependencies. |