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.hqwc.cn/news/210773.html

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

相关文章

Linux---常用命令汇总

文章目录 关于目录操作的命令ls/llcdpwdmkdir 关于文件操作的命令touchechocatrmmvcpvim 关于查询操作的命令greppsnetstat 关于目录操作的命令 ls/ll ls : 列出当前目录下的目录和文件(以行的展示形式) ll : 列出当前目录下的目录和文件&…

课堂巡课如何提升教学质量?简单才是硬道理

随着教育技术的不断发展,在线巡课系统逐渐成为学校管理和教育质量提升的重要工具。在线巡课系统通过数字化手段,为学校提供了更加高效、精准的巡课管理方式,有力地支持了教育教学的改进和优化。 客户案例 小学巡课项目 山东某小学引入了泛地…

字符串匹配算法——KMP

有文本串aabaabaaf,模式串aabaaf问文本串中是否出现过模式串 暴力解法 最不用动脑子的,直接两层for循环,逐个匹配,匹配到不相等的值时把文本串后移一位,再重新比较。这种方法的复杂度是O(mn),该方法低效的…

用uniapp在微信小程序实现画板(电子签名)功能

目录 一、效果展示 二、插件推荐与引入 三、代码具体应用 四、h5端将base64转换为url 一、效果展示 二、插件推荐与引入 手写板、签字板&#xff1b;<zwp-draw-pad /> - DCloud 插件市场 这个在微信小程序引入时内容简单&#xff0c;且涉及的方法很多&#xff0c;…

Python 异常的传递性

实例 这里就简单用2个function来演示一下异常的传递性 func1 这里num 1/0明显是一个ZeroDivisionError错误&#xff0c;作为演示 def func1():print("fun1 开始执行")num 1 / 0print("func1 结束执行") func2 def func2():print("func2 开始执…

NB水表能承受最大的水压是多少?

NB水表&#xff0c;作为新一代智能水表&#xff0c;以小巧的体积、稳定的性能和强大的功能赢得了市场的认可。那么&#xff0c;它究竟能承受多大的水压呢&#xff1f;接下来&#xff0c;小编来为大家揭秘下&#xff0c;一起来看下吧&#xff01; 一、NB水表概述 NB水表&#xf…

详解开源数据库审计平台Yearning

基本概念 数据库审计&#xff08;简称DBAudit&#xff09;能够实时记录网络上的数据库活动&#xff0c;对数据库操作进行细粒度审计的合规性管理&#xff0c;对数据库遭受到的风险行为进行告警&#xff0c;对攻击行为进行阻断。它通过对用户访问数据库行为的记录、分析和汇报&…

Win11和NewBing浏览器100%开启Copilot的方法

严格按以下步骤来&#xff0c;100%开启免费的AI&#xff1a; 1.系统升级到Win11最新版&#xff08;不要用家庭版&#xff0c;推荐专业版&#xff09; 升级完成之后的系统信息&#xff08;时间截至2023.11.22&#xff09; 版本号&#xff1a;23H2 操作系统版本&#xff1a;226…

如何挑选最适合的APP开发公司

随着科技的不断发展&#xff0c;app开发公司如雨后春笋般涌现&#xff0c;让人眼花缭乱。如何挑选最合适的app开发公司&#xff0c;成为了很多项目负责人的难题。本文将为你提供挑选app开发公司的三大秘籍&#xff0c;让你轻松找到最合适的合作伙伴&#xff0c;让你的项目飞起来…

shell循环语句 for while until

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

java学习part08权限

1.权限表格 外部类都是公有和缺省&#xff0c;因为其他两种对于外部类没有意义 一些内部成分都各种权限都可以 2.如何体现java封装性 答&#xff0c;通过权限控制&#xff0c;保证哪些可以给人看到&#xff0c;哪些不能

玻色量子“揭秘”之集合划分问题与QUBO建模

摘要&#xff1a;集合划分问题&#xff08;Set Partitioning Problem&#xff09;是一种组合优化问题&#xff0c;其中给定一个集合S和其若干个不同的子集S1&#xff0c;S2&#xff0c;...&#xff0c;Sn后&#xff0c;需要找到子集的有效组合&#xff0c;使得集合S的每个元素正…