wsl下ubuntu20.04配合clion编译openjdk8并运行

起因

最近,看synchronized的锁的底层原理,其中有一个涉及底层C++部分的objectMonitor对象,在进一步了解的过程中,以及之前看深入理解java虚拟机中第一部分,自己编译jdk的触发,开始考虑本地编译jdk,在jdk上进行调试的想法,遂开始网上找文档,我的环境是wsl(ubuntu)+clion.

心路历程

我一开始一直以为这个难点在于wsl的ubuntu毕竟不是原生的,依附于windows,这方面比较新,可能参考资料不多,查找教程也是往wsl编译jdk上靠,遂找到这两个方案,(219条消息) 《深入理解Java虚拟机:JVM高级特性与最佳实践(第三版)》中使用WSL进行JDK编译并在CLion中调试_cy948的博客-CSDN博客
(219条消息) Windows 10 + WSL(ubuntu 20.04) + CLion 编译JDK12_砖头23333的博客-CSDN博客,其实按部就班的按上面来,也未必有问题,不过哎,我就想编译jdk8版本的,没成想,这点坚持开始了后期的精神折磨.

遇到的问题:

jdk8的源码超级不好下,搜索下载jdk8源码,往往两个方案:

第一,官方下载源代码

这个一般通过openjdk官方,里面选择自己想要的版本,点进去是这样的:在这里插入图片描述

这里有个巨坑,从官方下载的,有的是全部源码,相关jar都会下载下来,有的是类似maven版本控制那种,只有个类似pom.xml文件.

第二,直接下载成品:

一方面github上面也有github/openjdk,其实这个也是官方,不过版本标注模式比较迷,其实gitee也有一样的镜像gitee,这个也是,版本标注迷,还有最新更新只到2017年左右,我们知道实际上jdk8一直在维护的.这个版本不是最新的.

可惜我都试过了,这两种都不是太行,注意,是不太行,不是不行.考虑到我的能力,但就已知问题看,小问题太多太多,虽然大部分都有解决方案,但你在修改过程中,明显感受到版本问题很重,有些是修改源码,有些是删除源码.

最终我卡在了提示cc1plus: all warnings being treated as errors,这个意思gcc把警告当作错误处理,解决方案有,但前提要gcc降版本,一方面./config -no-warnings-are-errors这种方式,高版本gcc不生效,添加环境变量我也试了也是没效果,目前了解到可能要降到gcc4开头的版本可能有效果,将版本也是个痛苦的事情,问题还不一定有效果,4.9的我试了不行,目前手里有4.8.2的gcc,还没试,到这一步,基本就搞一天了,主要下jdk是真的恶心,格局小了,一开始出于谨慎,这种非官方来源的代码不是特别敢运行,沙箱啥的又觉得费劲,所以用第一种方案下的源代码,哎,巧了!刚好下的就是那种需要运行类似git的拉去源代码的形式,通过命令hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/拉取源代码,我以为下下来的就是全部的源码,运行make images命令,死活编译过不去,其实下载的官方文档doc/building.md里面有步骤说明…,害,主要现在遇到问题,还停留在走一步看一步,不行上百度的层次,还没到高手那种系统的方法论,找官方,看源码.好在,以前自己搞事情的经验告诉我,还是要灵活,换个法,我就开始搜编译jdk8,侧重点不放在wsl上了,事实证明这是对的,!!!实战:自己编译JDK | 码农家园 (codenong.com),原本完全按照这个博主的做法做就行了.主要用hg命令下载是真的慢,我想着用github上下载好的,走博主这个模式不就行了…谁知又是坑,版本问题,版本问题,版本问题,重要的事情说三遍,还是会出现上文的问题.

这时我留个后手,昨天用hg下了一天的源码貌似下好了,hg命令下载的时候一定要选择适合自己的版本,这里我20.04的ubuntu,应用进项apt-get update之后,我从官网选择jdk8里面的jdk8u,也可以考虑jdk8u-dev,这两个我看基本上最后更新日期都很新.然后我按照博主的方法完美运行.clion部分参照最上面两个wsl文章即可。

总结:

基于版本考虑,能从官方下就从官方下目标jdk版本下最新版本的源代码(如果自己的操作系统本身比较新的话),下完看下readme文档,里面有要不要用hg命令再次拉取源代码.只要源码本身全且与系统契合,make编译时你会发现及其丝滑,我用官方jdk8最新源码加hg命令拉取源代码,最后make时,一次通过!!!

在这里插入图片描述上图有一处与二者的不同,由于我选择的jdk8u的版本很新,个人推测应该是用再像之前那样,选择jdk7 的版本了,可以直接考虑用自己编译出的java命令.

心得体会:

版本问题依然是工程开发过程中的不可避免的棘手问题,记得我自己上手的第一个大一点的demo项目,作死,改了一个mavenJar包的版本,牵一发动全身,bug不断,自己构建项目整体,整体对于版本控制这方面,还是应该上心些.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值