fatal error: sys/sysctl.h: 没有那个文件或目录 #include <sys/sysctl.h> (JVM)Linux下编译openjdk-8报错

/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的解决方法

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值