在window10 WSL 中编译 OpenJDK13

2023-10-31

简介

最新的OpenJDK13已经发布到git上,可以git pull,然后编译了。

这里介绍了直接在windows 10 的WSL环境中进行build并测试。

准备

在Open JDK13的网站文档中说,很简单的几步操作就好:

  1. 下载源码:
hg clone http://hg.openjdk.java.net/jdk/jdk

好吧,这一步可能会拦住很多的爱好者。要成功clone下来源码,很困难。

  1. 执行configure
    在源码的目录下,执行configure命令
bash configure
  1. 执行make
make images
  1. 验证得到的JDK
.build/*/images/jdk/bin/java -version

还可以执行test验证

make  run-test-tier1

开始

在第一步,要clone下来代码,在国内成功的可能性太低;
可以利用gitee码云来import在github上的openjdk的jdk13;然后再从gitee码云上clone到本地。
感谢码云gitee。

在github上的git 库访问地址,在gitee上import一下就OK了。

https://github.com/openjdk/jdk13

在第二步,在configure执行时,会检查很多的依赖项和命令。
在执行configure执行,还执行以下命令:

sudo apt-get install libfreetype6-dev libcups2-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev libasound2-dev libffi-dev autoconf gcc clang libfontconfig1-dev

然后,还需要安装一下Boot-JDK; 安装boot-JDK: java-12-jdk.
Boot-JDK版本都是又要求的。一般要求是编译版本N-1,有些也可以N -2.
这里需要JDK12版本。

sudo apt-get install openjdk-12-jdk

现在,你可以开始执行 ./configure

错误

开始检查,可以缺少一下工具命令。比如zip、unzip……。

这个你可以轻松地安装搞定。

然后,出现boot-jdk错误 :

configure: Could not find a valid Boot JDK. OpenJDK distributions are available at http://jdk.java.net/.
configure: error: Cannot continue
configure: This might be fixed by explicitly setting --with-boot-jdk

这是什么?然后你可能按照提示, 使用命令参数 --with-boot-jdk指定安装好的JDK。

再执行 ./configure --with-boot-jdk=/usr/lib/jvm/java-12-openjdk-amd64/
继续失败。

checking for jni library path... default
checking if packaged modules are kept... yes (default)
checking for version string... 13-internal+0-adhoc.david.jdk13
configure: Found potential Boot JDK using configure arguments
configure: error: The path given by --with-boot-jdk does not contain a valid Boot JDK
configure: Potential Boot JDK found at /usr/lib/jvm/java-12-openjdk-amd64/ did not contain bin/java; ignoring

可boot-jdk就在那里!没办法,上午一番搜索。

在网上找到设置unset _JAVA_OPTIONS
继续失败。。

方法

没有折了。看一下building文档。里面针对window10 wsl,提到了需要特别注意的配置。

Windows Subsystem for Linux (WSL)

Windows 10 1809 or newer is supported due to a dependency on the wslpath utility and support for environment variable sharing through WSLENV. Version 1803 can work but intermittent build failures have been observed.

It's possible to build both Windows and Linux binaries from WSL. To build Windows binaries, you must use a Windows boot JDK (located in a Windows-accessible directory). To build Linux binaries, you must use a Linux boot JDK. The default behavior is to build for Windows. To build for Linux, pass --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu to configure.

按照说明,修改命令,再次执行新命令:

./configure --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu

然后就看到了结果成功完成。

执行命令:

config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/Makefile

...
checking for which lcms to use... bundled
checking for cos in -lm... yes
checking for dlopen in -ldl... yes
checking if shenandoah can be built... yes
checking if zgc can be built... yes
checking if jvmci module jdk.internal.vm.ci should be built... yes
checking if graal module jdk.internal.vm.compiler should be built... yes
checking if aot should be enabled... yes
checking if cds should be enabled... yes
checking if elliptic curve crypto implementation is present... yes
checking if jtreg failure handler should be built... no, missing jtreg
checking if the CDS classlist generation should be enabled... yes
checking if any translations should be excluded... no
checking if static man pages should be copied... yes
checking if a default CDS archive should be generated... yes
checking for number of cores... 8
checking for memory size... 8098 MB
checking for appropriate number of jobs to run in parallel... 7
checking flags for boot jdk java command ...  -Duser.language=en -Duser.country=US  -XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=/mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/configure-support/classes.jsa -Xshare:auto
checking flags for boot jdk java command for big workloads...  -Xms64M -Xmx1600M -XX:ThreadStackSize=1536
checking flags for bootcycle boot jdk java command for big workloads... -Xms64M -Xmx1600M -XX:ThreadStackSize=1536
checking flags for boot jdk java command for small workloads...  -XX:+UseSerialGC -Xms32M -Xmx512M -XX:TieredStopAtLevel=1
checking whether to use sjavac... no
checking whether to use javac server... yes
checking If precompiled header is enabled... yes
checking that precompiled headers work... yes
checking is ccache enabled... no
checking if build directory is on local disk... no
checking JVM features for JVM variant 'server'... "aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc"
configure: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/configure-support/config.status
config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/spec.gmk
config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/bootcycle-spec.gmk
config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/buildjdk-spec.gmk
config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/compare.sh
config.status: creating /mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release/Makefile

====================================================
A new configuration has been successfully created in
/mnt/d/openjdk13/jdk13/build/linux-x86_64-server-release
using configure arguments '--build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu'.

Configuration summary:
* Debug level:    release
* HS debug level: product
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc'
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 13-internal+0-adhoc.david.jdk13 (13-internal)

Tools summary:
* Boot JDK:       openjdk version "12.0.2" 2019-07-16 OpenJDK Runtime Environment (build 12.0.2+9-Ubuntu-118.04) OpenJDK 64-Bit Server VM (build 12.0.2+9-Ubuntu-118.04, mixed mode)  (at /usr/lib/jvm/java-12-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 7.4.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 7.4.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   7
* Memory limit:   8098 MB

WARNING: Your build output directory is not on a local disk.
This will severely degrade build performance!
It is recommended that you create an output directory on a local disk,
and run the configure script again from that directory.

等待半小时后,build完成


Updating support/demos/image/jfc/Stylepad/src.zip
Compiling 5 files for BUILD_DEMO_SampleTree
Updating support/demos/image/jfc/SampleTree/src.zip
Compiling 8 files for BUILD_DEMO_TableExample
Updating support/demos/image/jfc/TableExample/src.zip
Note: /mnt/d/openjdk13/jdk13/src/demo/share/jfc/Metalworks/MetalworksPrefs.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Compiling 1 files for BUILD_DEMO_TransparentRuler
Updating support/demos/image/jfc/TransparentRuler/src.zip
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /mnt/d/openjdk13/jdk13/src/demo/share/jfc/TableExample/TableExample4.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Note: /mnt/d/openjdk13/jdk13/src/demo/share/jfc/Stylepad/Stylepad.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Creating java.base.jmod
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Creating support/demos/image/jfc/CodePointIM/CodePointIM.jar
Creating support/demos/image/jfc/FileChooserDemo/FileChooserDemo.jar
Creating support/demos/image/jfc/Font2DTest/Font2DTest.jar
Creating support/demos/image/jfc/SwingSet2/SwingSet2.jar
Creating support/demos/image/jfc/J2Ddemo/J2Ddemo.jar
Creating support/demos/image/jfc/Metalworks/Metalworks.jar
Creating support/demos/image/jfc/Notepad/Notepad.jar
Creating support/demos/image/jfc/Stylepad/Stylepad.jar
Creating support/demos/image/jfc/SampleTree/SampleTree.jar
Creating support/demos/image/jfc/TableExample/TableExample.jar
Creating support/demos/image/jfc/TransparentRuler/TransparentRuler.jar
Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'linux-x86_64-server-release'

测试一下java command:

$ ./build/linux-x86_64-server-release/jdk/bin/java -version
openjdk version "13-internal" 2019-09-17
OpenJDK Runtime Environment (build 13-internal+0-adhoc.david.jdk13)
OpenJDK 64-Bit Server VM (build 13-internal+0-adhoc.david.jdk13, mixed mode)

检查javac command:

$ ./build/linux-x86_64-server-release/jdk/bin/javac -version
javac 13-internal

测试一下编译程序和执行

写一个hello

$ makedir samples
$ vi samples\hello.java

编写最简单的hello.java源码:

public class hello
{
   public static void main(String[] args) 
   {
      System.out.println("Hello, World ... ");
   }
}

编译执行:

$./build/linux-x86_64-server-release/jdk/bin/javac samples/hello.java -d .
$ ls hello.class
hello.class

$ ./build/linux-x86_64-server-release/jdk/bin/java hello
Hello, World...

以上,终于编译成功了。

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

在window10 WSL 中编译 OpenJDK13 的相关文章

  • 如何使用 Spring Data Rest 和 PagingAndSortingRepository 处理异常?

    假设我有一个像这样的存储库 public interface MyRepository extends PagingAndSortingRepository
  • Spring @PostConstruct 依赖于 @Profile

    我想在一个配置类中拥有多个 PostConstruct 带注释的方法 这些方法应该根据 Profile 进行调用 你可以想象这样的代码 Configuration public class SilentaConfiguration priv
  • 从文件中读取文本并将每行中的每个单词存储到单独的变量中

    我有一个包含以下内容的 txt 文件 1 1111 47 2 2222 92 3 3333 81 我想逐行读取并将每个单词存储到不同的变量中 例如 当我读取第一行 1 1111 47 时 我想将第一个单词 1 存储到var 1 1111 进
  • Eclipse JAVA工具jar不存在

    The archive C Java jdk1 6 0 26 32 lib tools jar which is referenced by the classpath does not exist 这是我运行Tomcat时遇到的错误 清理
  • CDI 对象无法使用注入的构造函数进行代理

    当尝试将参数注入 CDI bean ApplicationScoped 的构造函数时 我遇到以下问题 Caused by org jboss weld exceptions UnproxyableResolutionException WE
  • 为什么需要添加工件 JSR305 才能使用 Guava 14+?

    在stackoverflow上查找信息时 我看到了一个与我类似的问题 但没有真正的答案here https stackoverflow com questions 3800033 guava r07 gwt and javax annota
  • 规范路径和绝对路径有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 中的 getPath getAbsolutePath 和 getCanonicalPath 有什么区别 https stackoverflow com questions 1099300 w
  • 如何使用 Java2D 创建硬件加速图像?

    我正在尝试创建一个快速图像生成器 它可以执行大量 2d 转换和形状渲染 因此我尝试使用 BufferedImage 然后获取 Graphics2D 对象来执行所有绘图 我现在主要关心的是 make 速度非常快 所以我创建一个像这样的 Buf
  • JConsole主类

    我正在尝试使用其 Main 类从命令行启动 JConsole 我提取了 jconsole jar 的内容 在 MANIFEST MF 中我可以看到 Main Class sun tools jconsole JConsole 所以我尝试运行
  • 原型组件的 Spring 事件处理

    假设我有两个组件 X 和 Y 其中 X 是单例 而 Y 不是 当我发布XUpdateEvent时 没有问题 我可以捕获该事件 但是 对于 YUpdateEvent 我无法捕获事件 Spring 为每个触发的事件创建新实例 而不是使用已经创建
  • 使用 IntelliJ 调试 Java 进程 - 连接到套接字但不连接到目标 VM

    现在已解决 请参阅问题末尾 我正在尝试使用 IntelliJ Community Edition 的调试器来调试 Java 进程 套接字正在侦听 但是当我尝试连接时 调试过程显示以下内容 连接到目标虚拟机 地址 8003 传输 socket
  • Java Swing 组件的命名约定(前缀)

    在 Java 中使用 Swing 进行编程时 我想到的一个问题是 它是 Swing 组件的推荐还是 官方 最常用的命名约定 前缀 例如 尽管其他人可能更喜欢其他命名约定 但这就是我当前正在使用的 JTextField 的 txt JButt
  • 错误:libXext.so.6:无法打开共享对象文件:没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 运行尝试打开 ods 文件的 java 文件时出现以下错误 线程 main 中出现异常 java lang UnsatisfiedLinkError opt software jdk1 6 0 45 jre li
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • android.R.layout.simple_list_item_1是什么?

    在我看到的所有示例中 他们在创建 ArrayAdapter 时仅使用 android R layout simple list item 1 android R layout simple list item 1是什么 它只是一个名为sim
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 通过命令行增加Java中的MaxPermSize内存

    您能否解释一下如何增加此 PermSpace 大小 我正在使用 Gate 应用程序并加载大量数据和大量插件 不幸的是每次运行后都会出现有关内存不足 maxPermSpace 的错误 我到处搜索 但我找不到如何通过命令行增加这个大小 或者可能
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望

随机推荐

  • mysql-connector-java与mysql版本的对应

    记录下mysql connector java与mysql版本的对应关系 已方便以后参考 这是最新版本对应 时间 2017年5月23日 官网文档地址 https dev mysql com doc connector j 5 1 en co
  • kafka-__consumer_offsets

    consumer offsets zookeeper不适合大批量的频繁写入操作 Kafka 1 0 2将consumer的位移信息保存在Kafka内部的topic中 即 consumer offsets主题 并 且默认提供了kafka co
  • RACI 职责分配矩阵 模型使用详解及案例分析

    一 RACI产生背景 RACI是项目管理中的人力资源管理方法 一个项目团 队的成员往往来自于不同背景的各个部门 这些成员受部门经理和项目经理的双重管辖 由于这些人往往是临时组织起来的 并且项目的各个阶段扮演不同的角色 而项目的任务又很紧迫
  • Spring详解(二)------IOC控制反转

    我相信提到 Spring 很多人会脱口而出IOC 控制反转 DI 依赖注入 AOP等等概念 这些概念也是面试官经常问到的知识点 那么这篇博客我们就来详细的讲解 IOC控制反转 ps 本篇博客源码下载链接 百度网盘 链接不存在 密码 oquc
  • 全国计算机等级考试题库二级C操作题100套(第100套)

    第100套 给定程序中 函数fun的功能是 在形参s所指字符串中寻找与参数c相同的字符 并在其后插入一个与之相同的字符 若找不到相同的字符则函数不做任何处理 例如 s所指字符串为 baacda c中的字符为 a 执行后s所指字符串为 baa
  • LU分解

    在高等工程数学一书中 LU分解 LU Decomposition 是矩阵分解中最普通的一种 也是最经典的一种 它可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积 有时是它们和一个置换矩阵的乘积 LU分解主要应用在其数值分析中 用
  • Java远程连接Redis时出现: java.net.SocketTimeoutException: connect timed out的解决办法

    今天连接Redis报了了连接超时的错误 搞了半天终于把问题给解决了 这里来梳理一下我解决问题的思路 1 redis已经在linux上安装成功了 也已经正常启动了 端口6379 2 使用idea连接redis报连接超时 第一想法是没有开启re
  • ROI Align 解析

    ROI Align 是何凯明在2017年的论文Mask RCNN中提出的 该方法很好地解决了ROI Pooling操作中两次量化造成的区域不匹配 mis alignment 问题 本文将先从实验结果入手 然后分析ROI Pooling产生局
  • 电商运营中的五个数据陷阱

    来源 新媒之家 电商 看懂数据是基本功 软件可以解决繁琐的计算 但解读还需要运营人员有基本的数据分析能力 本文列举了五个常见的数据陷阱 了解和掌握后可以有效避免一些分析结果的偏差 如今 大数据 的概念被炒得沸沸扬扬 不可否认 数据确实是越来
  • java服务压测连接中断org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连

    1 服务压测出问题 2021 06 16 09 04 51 062 http nio 8089 exec 78 ERROR o a c core ContainerBase Tomcat localhost Exception Proces
  • Java项目部署完整步骤(腾讯云服务器)

    步骤一 购买服务器 小项目2核4G够用 2 4个启动器 多了服务器扛不住 xshell默认是不携带宝塔面板的需要输入命令进行下载 Centos安装脚本 yum install y wget wget O install sh https d
  • Spring Boot使用ApplicationRunner实现项目启动之后直接执行业务操作

    前言 如果我们希望在项目启动成功后自动执行某些操作或者业务的话 可以有很多方法 比如 在Application主程序里面写 或者是 这两个接口分别为CommandLineRunner和ApplicationRunner 这里简单的介绍另外一
  • 判断字符串是否为空

    一 判断一个字符串为空的方法有 str null equals str str null str length 0 str null str isEmpty 注意 1 length是属性 一般集合类对象拥有的属性 取得集合的大小 例如 数组
  • faker.js 创建者希望 GitHub 恢复他的权利;微软公布 VS Code 2022 年路线图;Java 18 的新特性

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 faker js 创建者希望 Gi
  • Linux定时服务

    目录 1 定时器操作 2 cron表达式的语法规则 参考链接 1 定时器操作 sudo crontab e 选择2 进入进行配置 需要按下 i sh home xx crontabsh test sh的意思是 让sh解释器调用test sh
  • cannot import name ‘mean_squared_erro‘ from ‘sklearn.metrics‘

    sklearn中模块包的导入报错 根据其他博主的意见 sklearn更新的版本中有很多包调整了层次结构 以至于我们在跑代码的时候会出现导入包错误 这时候我们需要做的就是打开sklearn的官网 https scikit learn org
  • 【华为OD机试真题2023B卷 JAVA&JS】增强的strstr

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 增强的strstr 知识点字符串 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 C 语言有一个库函数 char strstr const char haystack
  • 聚观早报

    今日要闻 滴滴被处罚 80 26 亿元罚款 百度发布第六代量产无人车Apollo RT6 特斯拉出售比特币资产 套现近10亿美元 字节跳动估值跌破3000亿美元 哪吒汽车完成超 30 亿元 D3 轮融资 滴滴被处罚 80 26 亿元罚款 据
  • 时序预测

    时序预测 MATLAB实现CNN 卷积神经网络 时间序列预测 预测效果一览 以下介绍程序设计过程 加载数据与数据集划分 常用load载入 mat文件 划分数据集 计算数据长度
  • 在window10 WSL 中编译 OpenJDK13

    简介 最新的OpenJDK13已经发布到git上 可以git pull 然后编译了 这里介绍了直接在windows 10 的WSL环境中进行build并测试 准备 在Open JDK13的网站文档中说 很简单的几步操作就好 下载源码 hg