2

我似乎无法在 Windows 上编译 mod_dontdothat。有没有人设法做到这一点?

编辑:

我尝试根据网站上的自述文件编译文件,并尝试添加额外的库以减少链接错误。我已经安装了以下内容:

  1. 阿帕奇 2.2.9
  2. 视觉工作室 2008
  3. ActivePerl
  4. 来自 ApacheLounge 的 apxs-win32
  5. Subversion 库和头文件

我运行以下命令行:

C:\Program Files\Apache Software Foundation\Apache2.2\bin>apxs -c -I ..\include\
svn_config.h -L ..\lib -LC:\Progra~1\Micros~1.0\VC\lib -l apr-1.lib -l aprutil-
1.lib -l svn_subr-1.lib -l libapr-1.lib -l libaprutil-1.lib -l libhttpd.lib -ll
ibsvn_subr-1.lib -l mod_dav.lib mod_dontdothat.c

然后我收到以下错误:

cl /nologo /MD /W3 /O2 /D WIN32 /D _WINDOWS /D NDEBUG -I"C:\PROGRA~1\APACHE~
1\Apache2.2\include" /I"..\include\svn_config.h" /c /Fomod_dontdothat.lo mod_d
ontdothat.c
mod_dontdothat.c
链接 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"C:\PRO
GRA~1\APACHE~1\Apache2.2\lib" /out:mod_dontdothat.so /libpath:"..\lib" /libpat
h:"C:\Progra~1\Micros~1.0\VC\lib" apr-1.lib aprutil-1.lib svn_subr-1.lib libapr
-1.lib libaprutil-1.lib libhttpd.lib libsvn_subr-1.lib mod_dav.lib mod_dontdot
帽子.lo
   创建库 mod_dontdothat.lib 和对象 mod_dontdothat.exp
mod_dontdothat.lo:错误 LNK2019:未解析的外部符号 _dav_svn_split_uri
@32 在函数 _is_this_legal 中引用
svn_subr-1.lib(io.obj):错误 LNK2001:未解析的外部符号 __imp__libint
l_dgettext
svn_subr-1.lib(subst.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__lib
intl_dgettext
svn_subr-1.lib(config_auth.obj) : 错误 LNK2001: 无法解析的外部符号 __im
p__libintl_dgettext
svn_subr-1.lib(time.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__libi
ntl_dgettext
svn_subr-1.lib(nls.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__libin
tl_dgettext
svn_subr-1.lib(dso.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__libin
tl_dgettext
svn_subr-1.lib(path.obj) : error LNK2001: unresolved external symbol __imp__libi
ntl_dgettext
svn_subr-1.lib(prompt.obj) : error LNK2001: unresolved external symbol __imp__li
bintl_dgettext
svn_subr-1.lib(error.obj) : error LNK2019: unresolved external symbol __imp__lib
函数 _print_error 中引用的 intl_dgettext
svn_subr-1.lib(config.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__li
bintl_dgettext
svn_subr-1.lib(utf.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__libin
tl_dgettext
svn_subr-1.lib(cmdline.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__l
ibintl_dgettext
svn_subr-1.lib(utf.obj) : error LNK2019: unresolved external symbol __imp__libin
函数 _fuzzy_escape 中引用的 tl_sprintf
svn_subr-1.lib(path.obj) : error LNK2001: unresolved external symbol __imp__libi
ntl_sprintf
svn_subr-1.lib(cmdline.obj) : 错误 LNK2019: 无法解析的外部符号 __imp__l
函数 _svn_cmdline_init 中引用的 ibintl_fprintf
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__SHGetFolderPathA@20 在函数 _svn_config__win_config_path 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__SHGetFolderPathW@20 在函数 _svn_config__win_config_path 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__RegCloseKey@4 在函数 _svn_config__parse_registry 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__RegEnumKeyExA@32 在函数 _svn_config__parse_registry 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__RegOpenKeyExA@20 在函数 _svn_config__parse_registry 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__RegQueryValueExA@24 在函数 _parse_section 中引用
svn_subr-1.lib(config_win.obj):错误 LNK2019:未解析的外部符号 __imp
__RegEnumValueA@32 在函数 _parse_section 中引用
svn_subr-1.lib(win32_xlate.obj):错误 LNK2019:未解析的外部符号 __im
p__CoUninitialize@0 在函数 _svn_subr__win32_xlate_open 中引用
svn_subr-1.lib(win32_xlate.obj):错误 LNK2019:未解析的外部符号 __im
p__CoInitializeEx@8 在函数 _svn_subr__win32_xlate_open 中引用
svn_subr-1.lib(win32_xlate.obj):错误 LNK2019:未解析的外部符号 __im
p__CoCreateInstance@20 在函数 _get_page_id_from_name 中引用
svn_subr-1.lib(nls.obj):错误 LNK2019:未解析的外部符号 __imp__libin
函数 _svn_nls_init 中引用的 tl_bindtextdomain
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _inflate
在函数 _read_handler_gz 中引用
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _inflateI
nit_ 在函数 _read_handler_gz 中引用
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _deflate
在函数 _write_handler_gz 中引用
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _deflateI
nit_ 在函数 _write_handler_gz 中引用
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _deflateE
nd 在函数 _close_handler_gz 中引用
svn_subr-1.lib(stream.obj):错误 LNK2019:未解析的外部符号 _inflateE
nd 在函数 _close_handler_gz 中引用
mod_dontdothat.so : 致命错误 LNK1120: 21 unresolved externals
apxs:错误:命令失败,rc=6291456
.

我不是 C 大师,所以在找到这些未解决的外部符号方面的任何帮助将不胜感激!

4

3 回答 3

7

我设法编译了模块。先决条件:

这是一个分步指南。下载这些软件包:

将 dev 包解压到,c:\temp\svn将其他包解压到.c:\temp\svn-srcmod_dontdothatC:\Temp\dontdothat

模块的依赖项之一mod_dontdothatmod_dav_svn模块。不幸的是,您会发现mod_dav_svn二进制文件仅作为共享库 (DLL)。您不能链接到 DLL。所以第一步是建立一个静态mod_dav_svn库:

cd C:\Temp\svn-src\subversion\mod_dav_svn
apxs -c -I ..\include  -L C:\Temp\svn\lib -l libsvn_delta-1.lib -l libsvn_diff-1.lib -l libsvn_fs-1.lib -l libsvn_fs_base-1.lib -l libsvn_fs_fs-1.lib -l libsvn_fs_util-1.lib -l libsvn_repos-1.lib -l libsvn_subr-1.lib -l libapr-1.lib -l libaprutil-1.lib -l libhttpd.lib -l mod_dav.lib -l xml.lib  -n mod_dav_svn mod_dav_svn.c activity.c authz.c deadprops.c liveprops.c lock.c merge.c mirror.c repos.c util.c version.c reports\dated-rev.c reports\file-revs.c reports\get-locations.c reports\get-location-segments.c reports\get-locks.c reports\log.c reports\mergeinfo.c reports\replay.c reports\update.c

apxs 调用将打印它执行的命令。最后一个命令是构建 DLL 的链接调用。复制它,将“link”替换为“lib”,删除“/dll”参数,并将“out”参数文件名更改为“ libmod_dav_svn.lib”。你应该得到类似的东西:

lib kernel32.lib /nologo /subsystem:windows /machine:I386 /libpath:"C:\PROGRA~1\APACHE~1\Apache2.2\lib" /out:libmod_dav_svn.lib  /libpath:"C:\Temp\svn\lib"  libsvn_delta-1.lib libsvn_diff-1.lib libsvn_fs-1.lib libsvn_fs_base-1.lib libsvn_fs_fs-1.lib libsvn_fs_util-1.lib libsvn_repos-1.lib libsvn_subr-1.lib libapr-1.lib libaprutil-1.lib libhttpd.lib mod_dav.lib xml.lib   reports\update.lo reports\replay.lo reports\mergeinfo.lo reports\log.lo reports\get-locks.lo reports\get-location-segments.lo reports\get-locations.lo reports\file-revs.lo reports\dated-rev.lo version.lo util.lo repos.lo mirror.lo merge.lo lock.lo liveprops.lo deadprops.lo authz.lo activity.lo mod_dav_svn.lo

您将收到一些链接警告。你可以忽略它们。复制libmod_dav_svn.libmod_dontdothat目录。现在开始编译过程mod_dontdothat

C:\Temp\dontdothat
apxs -c -I C:\Temp\svn\include -L C:\Temp\svn\lib -l libsvn_subr-1.lib -l libapr-1.lib -l libaprutil-1.lib -l libhttpd.lib -l mod_dav.lib -l xml.lib -l libmod_dav_svn.lib    mod_dontdothat.c
apxs -i -n dontdothat mod_dontdothat.so

这应该可以解决问题。

于 2009-02-01T00:01:31.467 回答
3

谷歌搜索我有

  • mod_dav_svn.lib为了_dav_svn_split_uri
  • intl3_svn.lib对于所有事情_libintl
  • shell32.lib对于 SHGetFolderPath
  • advapi32.lib对于Reg简单的东西
  • ole32.lib因为CoInitialize它是同类
  • inflatedeflate闻起来像或zlib1.lib类似的东西

希望有帮助。

于 2009-01-27T10:30:46.120 回答
1

感谢您修改问题。

它看起来像一个明确的链接器问题。我看到第一个未定义的符号与 webdav 相关。你确定你在正确的地方有那个图书馆吗?我看到你给出了一个很好的长路径,有很多 svn 库,也许你忽略了一个?

于 2008-09-16T22:31:17.060 回答