And*_*dre 4 c windows apr visual-studio-2013 visual-studio-2017
尝试使用 Visual Studio 在 Windows 上构建 apr 1.7,尝试了 2017 年和 2013 年。
构建项目(调试|x86)或编译时,例如,dso.c如果收到以下错误消息:
1>dso.c
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2143: syntax error: missing ')' before '*'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2143: syntax error: missing '{' before '*'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2059: syntax error: ')'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2061: syntax error: identifier 'apr_winapi_pfn_if_indextoname'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2059: syntax error: ';'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2513: ' ': no variable declared before '='
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2065: 'apr_winapi_pfn_if_indextoname': undeclared identifier
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): warning C4047: '=': 'int' differs in levels of indirection from 'int *(__cdecl *)(NET_IFINDEX,PCHAR)'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2146: syntax error: missing ';' before identifier 'apr_load_dll_func'
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2100: illegal indirection
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): error C2064: term does not evaluate to a function taking 1207 arguments
1>c:\dev\log4cxx\apr\include\arch\win32\apr_arch_misc.h(503): warning C4033: 'apr_winapi_if_indextoname' must return a value
Run Code Online (Sandbox Code Playgroud)
我已成功构建版本1.65(在应用http://letcoderock.blogspot.com/2017/09/build-log4cxx-trunk-on-windows-by.html或Apache交叉编译错误./gen_test_char:无法执行的提示后二进制文件)
比较apr_arch_misc.h两个版本,我注意到DLL_IPHLPAPI枚举是新的apr_dlltoken_e,Intelisense 正在抱怨
APR_DECLARE_LATE_DLL_FUNC(DLL_IPHLPAPI, PCHAR, NETIOAPI_API_, if_indextoname, 0, (
NET_IFINDEX InterfaceIndex,
PCHAR InterfaceName),
(InterfaceIndex, InterfaceName));
Run Code Online (Sandbox Code Playgroud)
与“期待')'”。如果NETIOAPI_API_改成WINAPI. 不知道这是否正确,但现在可以编译该文件(使用 运行上述技巧后gen_test_char.exe)。
但之后我遇到了下一个问题:
1>sockaddr.c
1>network_io\unix\sockaddr.c(144): error C2065: 'IF_NAMESIZE': undeclared identifier
1>network_io\unix\sockaddr.c(144): error C2057: expected constant expression
1>network_io\unix\sockaddr.c(144): error C2466: cannot allocate an array of constant size 0
1>network_io\unix\sockaddr.c(144): error C2133: 'scbuf': unknown size
1>network_io\unix\sockaddr.c(1274): error C2065: 'IF_NAMESIZE': undeclared identifier
Run Code Online (Sandbox Code Playgroud)
我已经在 linux/cygwin 中使用 gcc 成功构建了 apr。我研究了 的预处理器替换IF_NAMESIZE,这里它被替换为44。但我找不到定义或设置位置。
有谁知道如何解决这个问题?上述更改是否WINAPI正确?
小智 5
正如 README 文件中所写:
请注意,在构建之前必须手动修改 include\apr.hw 文件以更改默认选项
所以我只是 #define _WIN32_WINNT 0x0501从 中删除了行apr-1.7.0\include\apr.hw
并运行nmake -f Makefile.win。对我来说效果很好。VS2017 工具,Windows 10。
| 归档时间: |
|
| 查看次数: |
1890 次 |
| 最近记录: |