概述
AlpineLinux-3.16编译openjdk17
若想在alpine-3.16上编译,必须C++版本必须低于11或使用版本低于1.2.3的musl-dev,否则只有通过修改jdk源码(大量)才能编译成功.1
释放community源
su -c 'vi /etc/apk/repositories' 删除community url前面的#
su -c 'apk update'
获取jdk17-dev源码
su -c 'apk add --no-cache git'
git clone https://github.com/openjdk17u-dev.git && cd jdk17u-dev
安装openjdk16作为Boot-jdk
需要community源
su -c 'apk add --no-cache openjdk16'
安装编译需要的软件包
su -c 'apk add --no-cache bash autoconf file make zip
gcc g++
libxtst-dev libxt-dev libxrender-dev libxrandr-dev
cups-dev fontconfig-dev alsa-lib-dev'
安装musl-dev 1.2.24
su -c 'apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/v3.15/main musl-dev=1.2.2-r7'
设置编译参数
bash configure --with-debug-level=fastdebug
可以先通过
bash configure --help
了解更多参数选项的含义
编译jdk源码
make images
或者
make all
简单测试编译成果
build/linux-x86_64-server-fastdebug/jdk/bin/java -version
或者
build/linux-x86_64-server-fastdebug/images/jdk/bin/java -version
openjdk version "17.0.5-internal" 2022-07-23
OpenJDK Runtime Environment (fastdebug build 17.0.5-internal+0-adhoc.waisam.jdk17u-dev)
OpenJDK 64-Bit Server VM (fastdebug build 17.0.5-internal+0-adhoc.waisam.jdk17u-dev, mixed mode, sharing)
只有jdk目录的java可用于调试, images内的不行
musl更新带来的影响
alpine-3.16 因为自带的标准C库musl更新到1.2.3,在使用C++11或以上版本时, 会将NULL定义为
nullptr
2,类型为:std:nullptr_t
,
而alpine-3.16的默认C++版本为C++143,这将使函数reinterpret_cast<oop*>(NULL)
无法转型,导致编译失败(笔者使用3.15的源重新安装了musl-dev 1.2.2-r7),自己编译GCC则需要数个小时) ↩︎musl-commit:
define NULL as nullptr when used in C++11 or later ↩︎
查看C++版本
gcc -dM -E -x c++ /dev/null | grep -F __cplusplus g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
↩︎C++ Standard __cplusplus C++98 199711L C++11 201103L C++14 201402L C++17 201703L C++20 202002L C++23 TBD 安装musl-dev 1.2.2避免以下类似错误
↩︎
最后
以上就是忧虑裙子为你收集整理的AlpineLinux-3.16编译openjdk17的全部内容,希望文章能够帮你解决AlpineLinux-3.16编译openjdk17所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复