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

2023-11-14

起因

最近,看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不断,自己构建项目整体,整体对于版本控制这方面,还是应该上心些.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wsl下ubuntu20.04配合clion编译openjdk8并运行 的相关文章

随机推荐

  • 常见数据库面试题整理

    本文主要转载自 http www cnblogs com remember forget p 6140112 html 一 什么是存储过程 有哪些优缺点 存储过程是一些预编译的SQL语句 更加直白的理解 存储过程可以说是一个记录集 它是由一
  • av_frame_free释放全部和av_frame_unref释放数据

    AVFrame结构 av frame alloc申请内存 av frame free释放内存 容易混淆的是av frame unref 它的作用是释放音视频数据资源 而av frame free是释放所有资源 包括音视频数据资源和结构体本身
  • VMware安装Android x86_64 8.1 虚拟机

    Vmware 安装 Android 虚拟机 原文摘录于 https www bbsmax com A kvJ3eg7Adg https blog csdn net Iamzhouyd article details 122796439 ht
  • 启动容器启动gpu报错

    sudo docker run itd name joint train p 9090 22 shm size 32G gpus all env DISPLAY v tmp X11 unix tmp X11 unix 10e7a6213e2
  • buck同步整流sw点负压问题

    buck同步整流sw点负压问题 1 前言 2 产生原因 3 影响 4 解决方法 5 buck同步整流逆流问题 5 1 产生原因 5 2 影响 5 3 解决方案 1 前言 有人突然问我一个专业问题 我以为我知道 结果并没有 尴尬 不过我也挺喜
  • Mybatis开发环境搭建

    Mybatis开发环境搭建 一 创建web工程并导入jar包 1 创建一个web工程 2 创建classes与lib文件夹 设置编译输出路径与测试路径 设置依赖的jar包目录 3 导入jar包 并设置add as library 二 编写M
  • mysql教程 新建连接_七、MySQL 创建连接

    连接到 MySQL 服务器由三种办法 使用 mysql 命名 使用 Navicat MySQL 客户端和使用各种开发语言连接 使用 mysql 命令连接 mysql 命令一般会随着 MySQL 安装而自带 这是最基本的也是最容易连接到 My
  • 好简单的RabbitMQ安装(Windows)

    目录 Windows下安装RabbitMQ需要以下几个步骤 1 安装erlang语言环境 下载erlang 设定环境变量 验证安装环境结果 2 下载并安装RabbitMQ 下载 安装主文件 安装RabbitMQ Plugins插件 登入管理
  • 代码审计方法与步骤

    代码审计方法与步骤 一 审计前的准备 1 获得源码 大多数PHP程序都是开源的 找到官网下载最新的源码包 2 安装网站 在本地搭建网站 一边审计一边调试 实时跟踪各种动态变化 二 把握大局 1 网站结构 浏览源码文件夹 了解该程序的大致目录
  • react滚动到指定位置_react 中 scrollTo 引发的思考

    如何在 React 中实现 scrollTo 效果 之前考虑过用scrollInToView 但是由于这个 API 实现的场景不能控制元素在屏幕上的显示位置遂选择其他出路 scrollTo 当只有一个元素需要直接滚动时 可以在 useEff
  • 一个插件,让你的 ChatGPT 不再报错!

    最近几天 相信大家都发现了 ChatGPT 一个问题 就是官网报错越来越频繁了 当你需用 ChatGPT 来处理一些比较琐碎的任务时 一旦你离开页面时间比较久 再度返回跟它进行对话 就会出现如下报错 虽然这个报错信息也曾有过 但没这么频繁
  • vscode 批量格式化

    今天推荐一个 vscode 批量格式化的扩展 Format Files 这个插件会依次打开需要格式化的文件进行格式化 使用方法很简单 在需要格式的文件夹右键 就可以看到开始格式化的操作 按照步骤进行即可 当然使用的前提 vscode 已经配
  • vue实现侧边栏导航和滚动定位

  • 计算机丢失msvcp90dll怎么办,msvcp90.dll

    msvcp90 dll官方版 msvcp90 dll官方版是电脑系统中不可缺少的dll文件 msvcp90 dll可以解决系统提示 找不到msvcp90 dll 或 msvcp90 dll 或者 msvcp90 dll 等情况 msvcp9
  • Win10家庭中文版开机后弹窗无法登录到你的账户点注销没用(解决过程记录)

    问题 之前一切正常 用完电脑后关机 没有提示有更新 也没更改系统设置 注册表什么的 时隔两天后开机就直接进入了临时账户 并弹窗 无法登录到你的账户 下面提示 通常可以通过从你的账户注销 然后重新登录来解决此问题 如果不立即注销 你创建的任何
  • Ubuntu系统配置花生壳内网穿透

    前言 本文档是基于被访问主机已经安装ssh服务 并且在内网已经确定ssh可用的情况下 做的穿透配置流程 一 被访问主机准备工作 被访问主机上下载花生壳并安装 我的是Ubuntu 1 Ubuntu安装包的下载命令如下 wget https d
  • 宏定义报重载错误

    我写了一个宏定义 define SWAP a b swap a a b b swap 然后在函数中进行引用 for i 1 i lt ma i SWAP covar k i covar j i 在编译过程中出现如下错误 error over
  • [Leetcode] 747. 至少是其他数字两倍的最大数

    题目描述 在一个给定的数组nums中 总是存在一个最大元素 查找数组中的最大元素是否至少是数组中每个其他数字的两倍 如果是 则返回最大元素的索引 否则返回 1 示例 1 输入 nums 3 6 1 0 输出 1 解释 6是最大的整数 对于数
  • FAST CGI的配置

    试着写一点fast cgi 查了一下 中文关于fast cgi的安装发现就一个文章 大家都是抄那个文章 那个文章写的还是不错 就是比较简单 只能指导大概的方法和方向 配置那个地方写的非常粗略 E文有一个文章写的非常详细 地址在这里 如果E文
  • wsl下ubuntu20.04配合clion编译openjdk8并运行

    起因 最近 看synchronized的锁的底层原理 其中有一个涉及底层C 部分的objectMonitor对象 在进一步了解的过程中 以及之前看深入理解java虚拟机中第一部分 自己编译jdk的触发 开始考虑本地编译jdk 在jdk上进行