fatal error: sys/sysctl.h: 没有那个文件或目录 #include <sys/sysctl.h> (JVM)Linux下编译openjdk-8报错
gmake[2]: *** [lib/NetworkingLibraries.gmk:57:/home/jdk8/build/linux-x86_64-normal-server-release/jdk/objs/libnet/PlainDatagramSocketImpl.o] 错误 1gmake[2]: *** 正在等待未完成的任务....gmake[2]: *** [lib/Networki
·
/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官方也发布了解决方法:
更多推荐
已为社区贡献1条内容
所有评论(0)