启动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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值