Ubuntu 20 下编译OpenJDK11
Ubuntu 下编译OpenJDK11
博主使用的Vmware虚拟机,Ubuntu 20.4 TLS 编译openJDK 11
win10 编译见博主另外一篇文章
https://www.cnblogs.com/xiaoye-2018/articles/15813470.html
-
下载OpenJDK 源码
https://github.com/openjdk/jdk,版本:jkd 11.27 切换tag下载, 解压
建议先阅读源码目录下doc/building.html编译文档, 形成一个良好的学习习惯
-
安装依赖环境
一定得确保下面说有依赖都安装成功, 感觉输入的命令比Windos编译还多😂
# 安装GCC环境 apt-get install build-essential # 其他依赖 apt-get install -y libfreetype6-dev apt-get install -y libcups2-dev # 这里貌似一起安装会失败,失败后自行一条一条输入 apt-get install -y libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev apt-get install -y libasound2-dev apt-get install -y libffi-dev apt-get install -y autoconf apt-get install libfontconfig1-dev由于编译JDK 需要一个版本号至少为N - 1的JDK做引导,因此还需要安装一个小版本的JDK
apt-get install openjdk-10-jdk
-
解压下载的jdk源码
unzip jdk.zip (如果没有unzip 命令需要使用 apt-get install unzip 进行安装)
-
配置编译参数
##进入jdk 源码目录 cd jdk ##设置configure执行权限 chmod +x configure ##设置编译参数 ##configure检查(注意前导jdk必须提前安装) # 这几个参数意义: 指定编译64位虚拟机器、编译级别、关闭警告当错错误处理(这里尤其重要) # --with-boot-jdk: 这里是引导JDK 的路径,如果环境变量已经配置jdk10路径,这个参数可以省略 bash ./configure --with-target-bits=64 --with-debug-level=slowdebug --disable-warnings-as-errors --with-boot-jdk=/usr/local/jdk...如果运行configuration 缺失依赖,会提示需要安装的依赖
成功后会有如下提示信息:

-
成功后进行make
输入:make images, 等待完成
如果这里报下面的错误,说明gcc版本太高error: ‘readdir64_r’ is deprecated [-Werror=deprecated-declarations] while (readdir64_r(dirp, entry, &dp) == 0 && dp != NULL) { ^~~~~ In file included from /usr/local/jdk/jdk-jdk-11+27/src/java.base/unix/native/lib java/TimeZone_md.c:36:0: /usr/include/dirent.h:201:12: note: declared here extern int readdir64_r (DIR *__restrict __dirp,降低GCC 版本,由于默认安装的GCC 版本为9, 官方文档推荐至少7.4, 版本太低不能工作,通过自己的验证太高也无法工作

# 安装gcc 7, g++ 7 sudo apt-get install gcc-7 g++-7 # 更改默认版本, 100 表示优先级,最高的优先级会作为gcc默认的版本 # 格式:update-alternatives --install <link> <name> <path> <priority> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 # 同样更改g++ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 50 # 查看所选择的默认版本是否都为7 sudo update-alternatives --config gcc sudo update-alternatives --config g++gcc、g++版本都是7时,才可以正常编译
-
重新编译
先执行make clean清除原来生成的编译文件
再次执行make images
如果看到下面提示,则说明编译完成

这里可能会出现下面错误信息
fatal error: ld terminated with signal 9 [killed]这个问题主要是由于虚拟机的swap区内存不够导致, 机器性能好应该不会出现该问题

查看swap内存, free -m,

重新设置swap区域的内存cd /opt mkdir swap cd swap sudo dd if=/dev/zero of=swapfile bs=1024 count=3145728 sudo mkswap swapfile sudo swapon swapfilefree -m 命令查看下交换分区有没分配成功

编译成功后,直接将opt 文件删除即可 -
查看编译的JDK
进入:/build/linux-x86_64-normal-server-slowdebug/jdk/bin, 输入./java -version,
可以看到
11-internal字样
-
调试jvm 可以使用vscode,也可以使用clion,没什么难度
设置系统默认JDKupdate-alternatives --install /usr/bin/java java /usr/local/jdk/jdk-jdk-11+27/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java 1200 update-alternatives --config java


- VS Code 调试
这个文章是很久之前写的,具体过程我也没记录太详细,见谅,相关教程可以搜索C++ 调试,大致都差不多

浙公网安备 33010602011771号