Попытка построить апрель 1.7 в Windows с Visual Studio, пробовал 2017 и 2013.
При сборке проекта (Debug | 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
Я успешно собрал версию 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
был новым для enum apr_dlltoken_e
, и Intelisense жаловался на
APR_DECLARE_LATE_DLL_FUNC(DLL_IPHLPAPI, PCHAR, NETIOAPI_API_, if_indextoname, 0, (
NET_IFINDEX InterfaceIndex,
PCHAR InterfaceName),
(InterfaceIndex, InterfaceName));
с "ожиданием") ". Если изменились 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
Я успешно собрал apr с помощью gcc в linux / cygwin. Я рассмотрел замены препроцессора для IF_NAMESIZE
, и здесь он заменяется на 44
. Но не могу найти определение или где это установлено.
У кого-нибудь есть идеи как это исправить? И корректно ли указанное выше значение WINAPI
?