Windows使用WSL编译自己的JDK

Windows使用WSL编译自己的JDK

    • 一、获取源码
    • 二、构建编译环境
    • 三、进行编译
        • 验证编译结果
    • 四、配置环境变量
    • 五、使用CLion进行调试

参考资料:《深入理解java虚拟机》

笔者使用的操作系统为windows,但是windows编译自己的jdk还是比较麻烦的,所以我们就需要使用wsl构建一个ubuntu操作系统环境,然后编译。所幸构建ubuntu操作系统还是比较简单的,在微软商店搜索ubuntu,下载18版本即可。下载完成后打开,就可以看到ubuntu操作系统的命令行窗口了,使用cd命令进入/mnt文件夹,这个文件夹下的c文件夹对应C盘,d对应D盘,以此类推。

在这里插入图片描述

一、获取源码

现在我们需要获取OpenJDK源码,激怒JDK12版本的仓库页面,点击左侧的“Browse”,进入jdk12的根目录,然后点击左边的“zip”即可下载当前版本打包好的源码,到本地直接解压即可。

这里强烈建议一定要仔细阅读源码中的doc/building.html,可以使用网页翻译功能也是能看懂的。

二、构建编译环境

打开ubuntu,依次执行下面的代码即可

工具安装命令
GCCsudo apt-get install build-essential
FreeTypesudo apt-get install libfreetype6-dev
CUPSsudo apt-get install libcups2-dev
X11sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
ALSAsudo apt-get install libasound2-dev
libffisudo apt-get install libffi-dev
Autoconfsudo apt-get install autoconf
jdk11sudo apt-get install openjdk-11-jdk

三、进行编译

如编译FashDebug版、仅含Server模式的HotSpot虚拟机,命令应为:

bash configure --enable-debug --with-jvm-variants=server

注:此处如果带着调试、定制化需求去编译自己的OpenJDK,可以使用“bash configure --help”查询OpenJDK提供的编译参数,有兴趣可以自己尝试探索。

运行编译命令后:
在这里插入图片描述

可以看到成功页面,如果GCC版本太高的话,gcc下会出现报错信息,此处请注意检查。

还有一个坑就是出现了以下报错信息:

Could not find required tool for ZIPEXE

在这里插入图片描述

这是由于没有安装zip导致的,执行 sudo apt-get install zip即可

接下来就可以输入 make images 执行整个OpenJDK编译了,此处编译会耗费大量时间,笔者大概花费了一个小时左右才编译完成(R7 5800H)。

Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-server-fastdebug'

在这里插入图片描述

当弹出以上文字时说明编译成功

验证编译结果

进入编译成功后的jdk中的bin目录

执行 java -version命令,可以看到以下结果

在这里插入图片描述

说明编译成功,此目录已经可以作为一个jdk使用

四、配置环境变量

  • 使用vim配置环境变量

sudo vim ~/.bashrc

  • 使用编辑模式在文档最后输入
    # 这里要更改成你自己的目录export JAVA_HOME=/mnt/e/download/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdkexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=.:${JAVA_HOME}/bin:$PATH
  • 编辑完成后,使用:w 回车保存

使用:wq 退出vim

退出vim后输入以下代码保存环境变量

source ~/.bashrc

  • 查看Java 版本信息

java -version

  • 得到输出结果
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f)
OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f, mixed mode)

可以看到现在的jdk已经成了我们自己编译的jdk

五、使用CLion进行调试

现在我们在原来的WIndows操作系统上打开CLion,然后选择远程连接,连接到自己的WSL上,打开jdk12的源码

在这里插入图片描述

在这里插入图片描述

现在,我们就可以编译jdk12的源码并且使用自己调试的jdk了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

张弛语言课奇幻剧配音,一场特殊的体验

在为奇幻剧进行配音时,配音艺术家要将自己投入到一个充斥着魔法、幻想生物和超自然现象的虚构世界中。奇幻剧侧重于构建一个超越现实的幻境,因此配音工作要求既要呈现角色的个性化特征,也要与剧中的奇幻氛围相得益彰。以下是进行奇幻剧配音的…

主内存与工作内存数据交换八个步骤:

一:锁定:把主内存内一个变量标识为一条线程独占的状态; 二:解锁:把一个处于锁定状态的变量释放出来。释放后可被其他线程锁定; 三:读取:把一个变量的值从主内存传输到工作内存中&a…

12.你知道Spring的哪些扩展点,在什么时候调用?

Spring中非常非常多的扩展接口,当然你也不需要全部回答,可以挑重点回答: 执行BeanFactoryPostProcessor的postProcessBeanFactory方法1 /*** 2 * 作用: 在注册BeanDefinition的可以对beanFactory进行扩展 后 3 * 调用时机: Ioc加载时注册BeanDefinition 的时候会调用 4 */…

【C/C++】简单模拟题解

有52张朴克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下;接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;接着从第4张牌开始&am…

太神奇了!视频监控技术居然还能操作

随着科技的迅猛发展,视频监控系统在各个领域中的应用变得越来越广泛。从保护公共安全到提高工作效率,视频监控为我们提供了一种强大而多功能的工具。 视频监控技术已经成为我们日常生活和工作中不可或缺的一部分。通过视频监控,我们能够实时监…

shell循环语句 for while until

目录 什么是循环语句 概念 for循环 格式 while循环 格式 until 循环 格式 实验 for (1)计算1到100的和 ​编辑 (2)100以内的偶数 (从0开始到100结束,每次加2步 打印的都是偶数) &…

完美解决:在Ubuntu18.04下ROS Melodic基于python3的cv_bridge的一点子歪门邪道

由于在Ubuntu18.04下ROS Melodic是运行在python 2.7环境下,而我的程序需要运行在anaconda创建的python 3.x环境里,这就需要用到cv_bridge这个库,而不出意外的,各种报错,比如: from cv_bridge.boost.cv_bri…

贝锐向日葵:独家算法如何支撑不断地产品创新?

作为国民级的专业远程控制品牌,贝锐旗下的“向日葵远程控制”一直在远程控制领域不断积累创新。 近年来,远程控制软件本身开始成为企业的主流远程业务工具以及个人场景下的日常必备软件,向日葵远程控制也在不断地完善并创新产品。 比如在前…

pip安装tkinter模块失败 No matching distribution found for tkinter

我想使用Python创建一个简单的桌面应用程序, 这个应用程序依赖于tkinter, 然而,当我尝试安装过程时,出现了错误。 $ pip install tkinter ERROR: Could not find a version that satisfies the requirement tkinter (from versions: none) ERROR: No matching distributio…

泛微齐业成数电发票+乐企平台解决方案等您查收

近年来,国家持续发布加快数字化发展、深化税收征管制度改革的纲领性政策,与组织费用管理相关的发票、单据、档案等逐步完成数字化转型;2022年,全面数字化的电子发票正式执行,现在已有33地成为数电票试点。 全国数电票…

rust每日一库 rand 生成随机数

文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值 rust中官方并没有像以他语言一样,rust并没有官方并没有提供生成随机数的工具,所以我们要借助rand包…

实现文本选中变色

单个文本变色 <div id"myText">vfadsfgase</div> const myText document.getElementById(myText); myText.addEventListener(mouseup, () > {const selection window.getSelection();if (selection.toString() ! ) {const range selection.getRang…

Could not resolve host: gitlab.example.com问题解决

请按照以下步骤检查和修复 Hosts 文件&#xff1a; 打开 Hosts 文件&#xff1a;在 Windows 上&#xff0c;Hosts 文件位于 C:\Windows\System32\drivers\etc\hosts&#xff0c;可以使用记事本或其他文本编辑器打开。检查是否存在正确的映射关系&#xff1a;确保在 Hosts 文件…

深入剖析预约上门服务系统源码:构建高效服务的代码之旅

在本文中&#xff0c;我们将深入研究预约上门服务系统的源码&#xff0c;透过代码的层层剖析&#xff0c;揭示系统背后的技术奥秘。我们将关注系统的核心功能&#xff0c;并通过代码示例演示其实现过程&#xff0c;为读者提供一个深度技术解读的体验。 1. 技术栈选择&#xf…

教育机构拒绝“数据陷阱”,群硕将英孚新一代教学管理系统搬上桌

为什么小机构年年担心招生不够&#xff0c;英孚却令学生家长趋之若鹜&#xff1f; 区别就在教学管理方式。为了更好地管理分布全球的校区、学生和老师&#xff0c;英孚应用了一套教学管理系统&#xff0c;帮助学校管理学员&#xff0c;帮老师智慧排课&#xff0c;帮助家长记录…

Spring框架学习 -- 读取和存储Bean对象

目录 &#x1f680;&#x1f680; 回顾 getBean()方法的使用 根据name来获取对象 再谈getBean() (1) 配置扫描路径 (2) 添加注解 ① spring注解简介 ② 对类注解的使用 ③ 注解Bean对象的命名问题 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 获取Bean对象 -- …

基于YOLO模型建筑工地个人防护设备目标检测

使用安全装备可以保护他们免受建筑工地的意外事故。据统计&#xff0c;每年有数以万计的工人在建筑工地受到严重伤害&#xff0c;造成终生困难。然而&#xff0c;通过自我监控来确保工人穿戴个人防护装备非常重要。在这方面&#xff0c;需要一个准确和快速的系统来检测工人是否…

微信小程序其他环境都能显示在正式环境显示不出来

踩坑日记 用了uni.getImageInfo 用了uni.getImageInfo 本地开发环境&#xff0c;测试环境全都可以&#xff0c;就是更新到正式环境不显示。后面看代码百度了这个api发现图片所涉及的地址需要在小程序配置download域名白名单 https://uniapp.dcloud.net.cn/api/media/image.ht…

termios.h 头文件包含问题

报奇怪的错误&#xff0c;解决掉其他错误或告警信息后&#xff0c;调整头文件的顺序。

地埋式积水监测仪厂家批发,实时监测路面积水

地埋式积水监测仪是针对城市内涝推出的积水信息监测采集设备&#xff0c;采用超声波传感技术和超声波抗干扰功能&#xff0c;对路面的积水进行实时精准的监测。该设备能够在零下-5℃至高温70℃的严寒酷暑环境下可靠运行。它对城市道路积水进行实时监测并上报到监测系统之中&…