AlpineLinux-3.16编译openjdk17

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内的不行


  1. musl更新带来的影响

    alpine-3.16 因为自带的标准C库musl更新到1.2.3,在使用C++11或以上版本时, 会将NULL定义为nullptr2,类型为:std:nullptr_t
    而alpine-3.16的默认C++版本为C++143,这将使函数reinterpret_cast<oop*>(NULL)无法转型,导致编译失败(笔者使用3.15的源重新安装了musl-dev 1.2.2-r7),自己编译GCC则需要数个小时) ↩︎

  2. musl-commit:

    define NULL as nullptr when used in C++11 or later ↩︎

  3. 查看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++98199711L
    C++11201103L
    C++14201402L
    C++17201703L
    C++20202002L
    C++23TBD
    ↩︎
  4. 安装musl-dev 1.2.2避免以下类似错误
    ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值