Compile libxml2 get "error: storage size of ‘hints’ isn’t known"
Compile libxml2 get "error: storage size of ‘hints’ isn’t known"
我在 here 下载 libxml2 2.9.4,当我 ./configure; make
时,出现以下错误:
nanohttp.c: In function ‘xmlNanoHTTPConnectHost’:
nanohttp.c:1073:18: error: storage size of ‘hints’ isn’t known
struct addrinfo hints, *res, *result;
^
nanohttp.c:1079:11: warning: implicit declaration of function ‘getaddrinfo’ [-Wimplicit-function-declaration]
status = getaddrinfo (host, NULL, &hints, &result);
^
nanohttp.c:1079:2: warning: nested extern declaration of ‘getaddrinfo’ [-Wnested-externs]
status = getaddrinfo (host, NULL, &hints, &result);
^
nanohttp.c:1085:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
for (res = result; res; res = res->ai_next) {
^
nanohttp.c:1089:7: warning: implicit declaration of function ‘freeaddrinfo’ [-Wimplicit-function-declaration]
freeaddrinfo (result);
^
nanohttp.c:1089:7: warning: nested extern declaration of ‘freeaddrinfo’ [-Wnested-externs]
nanohttp.c:1073:18: warning: unused variable ‘hints’ [-Wunused-variable]
struct addrinfo hints, *res, *result;
^
完整的输出是here
这是我的环境:
roroco@roroco ~/Downloads $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 17.3 Rosa
Release: 17.3
Codename: rosa
roroco@roroco ~/Downloads $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.5-2ubuntu1~14.04.1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.5 (Ubuntu 4.8.5-2ubuntu1~14.04.1)
我尝试了2.9.2和2.9.3版本,我得到同样的错误,如何编译libxml2成功?
我找到了解决方案:
在nanohttp.c中,错误行:
#if defined(HAVE_GETADDRINFO) && (defined(SUPPORT_IP6) || defined(_WIN32))
{
int status;
struct addrinfo hints, *res, *result;
所以我可以禁用 ipv6 以不编译此块代码。我尝试使用以下代码:
./configure --enable-ipv6=no LIBS="-lpthread"; make
我在 "libxml2-src/configure"
中找到“--enable-ipv6”
要使用 "getaddrinfo",您必须使用 POSIX。
对于干净的 C,使用 gcc flag -std=gnu11
或 -std=gnu99
而不是 с11/с99
。
检查 POSIX 您可以使用此代码:
#ifdef __USE_POSIX
#warning POSIX compatible
#else
#warning no support POSIX
#endif
我在 here 下载 libxml2 2.9.4,当我 ./configure; make
时,出现以下错误:
nanohttp.c: In function ‘xmlNanoHTTPConnectHost’:
nanohttp.c:1073:18: error: storage size of ‘hints’ isn’t known
struct addrinfo hints, *res, *result;
^
nanohttp.c:1079:11: warning: implicit declaration of function ‘getaddrinfo’ [-Wimplicit-function-declaration]
status = getaddrinfo (host, NULL, &hints, &result);
^
nanohttp.c:1079:2: warning: nested extern declaration of ‘getaddrinfo’ [-Wnested-externs]
status = getaddrinfo (host, NULL, &hints, &result);
^
nanohttp.c:1085:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
for (res = result; res; res = res->ai_next) {
^
nanohttp.c:1089:7: warning: implicit declaration of function ‘freeaddrinfo’ [-Wimplicit-function-declaration]
freeaddrinfo (result);
^
nanohttp.c:1089:7: warning: nested extern declaration of ‘freeaddrinfo’ [-Wnested-externs]
nanohttp.c:1073:18: warning: unused variable ‘hints’ [-Wunused-variable]
struct addrinfo hints, *res, *result;
^
完整的输出是here
这是我的环境:
roroco@roroco ~/Downloads $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 17.3 Rosa
Release: 17.3
Codename: rosa
roroco@roroco ~/Downloads $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.5-2ubuntu1~14.04.1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.5 (Ubuntu 4.8.5-2ubuntu1~14.04.1)
我尝试了2.9.2和2.9.3版本,我得到同样的错误,如何编译libxml2成功?
我找到了解决方案:
在nanohttp.c中,错误行:
#if defined(HAVE_GETADDRINFO) && (defined(SUPPORT_IP6) || defined(_WIN32))
{
int status;
struct addrinfo hints, *res, *result;
所以我可以禁用 ipv6 以不编译此块代码。我尝试使用以下代码:
./configure --enable-ipv6=no LIBS="-lpthread"; make
我在 "libxml2-src/configure"
中找到“--enable-ipv6”要使用 "getaddrinfo",您必须使用 POSIX。
对于干净的 C,使用 gcc flag -std=gnu11
或 -std=gnu99
而不是 с11/с99
。
检查 POSIX 您可以使用此代码:
#ifdef __USE_POSIX
#warning POSIX compatible
#else
#warning no support POSIX
#endif