• 关于阿里云服务器Ubuntu编译jdk8中遇到的坑及解决方案


    关于阿里云服务器Ubuntu系统安装jdk8中遇到的坑及解决方案

    记录一下困扰了很多天、到处查资料最后终于成功安装的过程

    关于阿里云服务器无法登录的问题

    基本反馈是这样的:

    image-20230916205505741

    如果你添加了ip之后仍然登不进去,有一种方法是直接从第三个选项进去登录之后修改文件

    image-20230916205356481

    然后输入命令:

    sudo vim /etc/ssh/sshd_config
    
    • 1

    再在最底部修改PasswordAuthentication的参数为yes,输入:wq之后输入命令(直接重启也行):

    service sshd restart
    
    • 1

    安装旧版gcc

    先安装一些基本的依赖:

    sudo apt install build-essential libxrender-dev xorg-dev libasound2-dev libcups2-dev gawk zip libxtst-dev libxi-dev libxt-dev gobjc
    
    • 1

    接着我们先将JDK的编译环境配置好,首先是安装gcc和g++的4.8版本,但是最新的源没有这个版本了,我们先导入旧版软件源:

    sudo vim /etc/apt/sources.list
    
    • 1

    在最下方添加旧版源地址并保存:

    deb http://archive.ubuntu.com/ubuntu xenial main
    deb http://archive.ubuntu.com/ubuntu xenial universe
    
    • 1
    • 2

    接着更新一下apt源信息,并安装gcc和g++:

    sudo apt update
    sudo apt install gcc-4.8 g++-4.8
    
    • 1
    • 2

    于是在这里就碰见问题了,他说找不到

    E: Unable to locate package g++-4.8 E: Couldn't find any package by glob 'g++-4.8' E: Couldn't find any package by regex 'g++-4.8'
    
    • 1

    于是网上提供了两种方案

    第一种解决了gcc的安装问题

     sudo apt-get install gcc-4.8 g++-4.8
    
    • 1

    第二种,则解决了所有问题

     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb 
     wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libasan0_4.8.5-4ubuntu8_amd64.deb 
     sudo apt install ./gcc-4.8_4.8.5-4ubuntu8_amd64.deb ./gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb ./libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./cpp-4.8_4.8.5-4ubuntu8_amd64.deb ./libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./libasan0_4.8.5-4ubuntu8_amd64.deb ./g++-4.8_4.8.5-4ubuntu8_amd64.deb
     sudo apt update
     sudo apt-get install gcc-4.8 g++-4.8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    接着配置:

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100
    
    • 1
    • 2

    最后查看版本是否为4.8版本:

    nagocoler@ubuntu-server:~$ gcc --version
    gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5
    Copyright (C) 2015 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    nagocoler@ubuntu-server:~$ g++ --version
    g++ (Ubuntu 4.8.5-4ubuntu2) 4.8.5
    Copyright (C) 2015 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    接着安装make 3.81版本,需要从官方下载:

    wget https://ftp.gnu.org/gnu/make/make-3.81.tar.gz
    
    • 1

    下载好之后进行解压,并进入目录:

    tar -zxvf make-3.81.tar.gz 
    cd make-3.81/
    
    • 1
    • 2

    接着我们修改一下代码,打开glob/glob.c文件:

    ...
    #ifdef  HAVE_CONFIG_H
    # include 
    #endif
    
    #define __alloca alloca   <- 添加这一句
    /* Enable GNU extensions 
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接着进行配置并完成编译和安装:

    bash configure
    sudo make install
    
    • 1
    • 2

    安装完成后,将make已经变成3.81版本了:

    nagocoler@ubuntu-server:~/make-3.81$ make -verison
    GNU Make 3.81
    Copyright (C) 2006  Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装jdk8源码

    OpenJDK源码

    于JDK中某些代码是Java编写的,所以我们还需要安装一个启动JDK,启动JDK可以是当前版本或低一版本,比如我们要编译JDK8的源码,那么就可以使用JDK7、JDK8作为启动JDK,对源码中的一些java文件进行编译。这里我们选择安装OpenJDK8作为启动JDK:

    sudo apt install openjdk-8-jdk
    
    • 1

    这样,我们的系统环境就准备完成了,接着我们需要下载OpenJDK8的源码(已经放在网盘了)解压:

    unzip jdk-jdk8-b120.zip
    
    • 1

    接着我们需要安装JetBrains Gateway在我们的服务器上导入项目,这里我们使用CLion后端,等待下载远程后端,这样我们的Linux服务器上虽然没有图形化界面,但是依然可以使用IDEA、CLion等工具,只是服务器上只有后端程序,而界面由我们电脑上的前端程序提供(目前此功能还在Beta阶段,暂不支持arm架构的Linux服务器)整个过程根据服务器配置决定可能需要5-20分钟。

    完成之后,我们操作起来就很方便了,界面和IDEA其实差不多,我们打开终端,开始进行配置:

    bash configure --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FIELS=0
    
    • 1

    配置完成后:

    Configuration summary:
    * Debug level:    slowdebug
    * JDK variant:    normal
    * JVM variants:   server
    * OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
    
    Tools summary:
    * Boot JDK:       openjdk version "1.8.0_312" OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07) OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)  (at /usr/lib/jvm/java-8-openjdk-amd64)
    * C Compiler:     gcc-4.8 (Ubuntu 4.8.5-4ubuntu2) version 4.8.5 (at /usr/bin/gcc-4.8)
    * C++ Compiler:   g++-4.8 (Ubuntu 4.8.5-4ubuntu2) version 4.8.5 (at /usr/bin/g++-4.8)
    
    Build performance summary:
    * Cores to use:   3
    * Memory limit:   3824 MB
    * ccache status:  not installed (consider installing)
    
    WARNING: The result of this configuration has overridden an older
    configuration. You *should* run 'make clean' to make sure you get a
    proper build. Failure to do so might result in strange build problems.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    接着我们需要修改几个文件,不然一会会编译失败,首先是hotspot/make/linux/Makefile文件:

    原有的 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%
    修改为 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4% 5%
    
    • 1
    • 2

    接着是hotspot/make/linux/makefiles/gcc.make文件:

    原有的 WARNINGS_ARE_ERRORS = -Werror
    修改为 #WARNINGS_ARE_ERRORS = -Werror
    
    • 1
    • 2

    接着是nashorn/make/BuildNashorn.gmk文件:

      $(CP) -R -p $(NASHORN_OUTPUTDIR)/nashorn_classes/* $(@D)/
      $(FIXPATH) $(JAVA) \
    原有的 -cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
    修改为  -Xbootclasspath/p:"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
       jdk.nashorn.internal.tools.nasgen.Main $(@D) jdk.nashorn.internal.objects $(@D)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    开始编译:

    make all
    
    • 1

    这里又遇到了问题,在网上搜了半天总找不到正确答案

    gmake[5]: *** [/root/jdk-jdk8-b120/hotspot/make/linux/makefiles/top.make:91: ad_stuff] Error 2
    
    • 1

    后来发现最主要应该是看前面的内容

    sys/sysctl.h: No such file or directory  #include 
    
    • 1

    后来在网上查了才知道是Ubuntu的版本已经取消了这个头文件,我的版本:

    image-20230916210819253

    所以我们需要做的就是按照他所说的文件报错然后把该文件里的该头文件删掉

    vim build/linux-x86_64-normal-server-slowdebug/jdk/objs/libnet/PlainSocketImpl.o
    vim jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
    
    • 1
    • 2

    注释

    // #include 
    
    • 1

    最后弄了两三天的东西终于好了

  • 相关阅读:
    腾讯云16核服务器性能测评_轻量和CVM配置大全
    hal开发之hidl/aidl支持的绑定式直通式详细讲解
    如何修改 Kafka 消息保留时长:经验总结
    服务中找不mysql 错误 error 2003 ERROR 2003 (HY000):
    中国移动物联网开放平台OneNET学习笔记(1)——设备接入(MQTT协议)OneNET Studio篇
    【网络通信】计算机网络安全技术总结
    java计算机毕业设计Vue.js音乐播放器设计与实现MyBatis+系统+LW文档+源码+调试部署
    GEN 自动生成 GORM 模型结构体文件及使用示例
    安卓Webview中异步加载资源
    基于springboot+vue开发的教师工作量管理系
  • 原文地址:https://blog.csdn.net/m0_73976305/article/details/132925087