/home/jdk8/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c:38:24: fatal error: sys/sysctl.h: 没有那个文件或目录
 #include <sys/sysctl.h>
                        ^
compilation terminated.
/home/jdk8/jdk/src/solaris/native/java/net/PlainSocketImpl.c:46:24: fatal error: sys/sysctl.h: 没有那个文件或目录
 #include <sys/sysctl.h>
                        ^
compilation terminated.
In file included from /home/jdk8/jdk/src/share/native/java/net/net_util.c:29:0:
/home/jdk8/jdk/src/share/native/java/net/net_util.c: In function ‘NET_SockaddrToInetAddress’:
/home/jdk8/jdk/src/share/native/java/net/net_util.h:46:41: warning: comparison between pointer and integer [enabled by default]
 #define CHECK_NULL_RETURN(x, y) if ((x) == NULL) return y;
                                         ^
/home/jdk8/jdk/src/share/native/java/net/net_util.c:268:13: note: in expansion of macro ‘CHECK_NULL_RETURN’
             CHECK_NULL_RETURN(ret, NULL);
             ^
gmake[2]: *** [lib/NetworkingLibraries.gmk:57:/home/jdk8/build/linux-x86_64-normal-server-release/jdk/objs/libnet/PlainDatagramSocketImpl.o] 错误 1
gmake[2]: *** 正在等待未完成的任务....
gmake[2]: *** [lib/NetworkingLibraries.gmk:57:/home/jdk8/build/linux-x86_64-normal-server-release/jdk/objs/libnet/PlainSocketImpl.o] 错误 1
gmake[1]: *** [BuildJdk.gmk:70:libs-only] 错误 2
make: *** [/home/jdk8//make/Main.gmk:116:jdk-only] 错误 2

我的gcc和g++版本都是4.8,apt-get的jdk也是1.8版本,报错和make的版本没什么关系(已经实测过)。

这个报错的主要原因是随着 glibc 2.32 的发布,Linux 系统删除了sys/sysctl.h。

因此解决方式只需要把openjdk8目录下的jdk/src/solaris/native/java/net下的PlainDatagramSocketImpl.c和PlainSocketImpl.c中的38行和46行注释掉就行

#include <sys/sysctl.h>
注释掉就行,即改成
// #include <sys/sysctl.h>

如果这篇文章对你有用,麻烦大家点个赞吧(第一次发文章),感谢大家的支持。

这个问题openjdk官方也发布了解决方法:

openjdk官方关于Linux移除了sys/sysctl.h的解决方法

Logo

更多推荐