欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 源码编译jdk7 超详细教程 openjdk7

源码编译jdk7 超详细教程 openjdk7

2025/9/22 11:30:05 来源:https://blog.csdn.net/yjy000/article/details/144167321  浏览:    关键词:源码编译jdk7 超详细教程 openjdk7

关于源代码

当前的openJDK的源代码已经被发布到了github上了,所以我们可以直接从github上下载到。

OpenJDK7u源码托管地址:https://github.com/openjdk/jdk7u

带后缀U的地址,或者发行的jdk包,表示当前版本下的持续跟新版。而他们对应的各自的正式发行版可以在其对应代码托管地址的tag中找到。

这里我们使用jdk7当前的最新更新的正式发行版作为源代码来编译,下载地址如下

https://github.com/openjdk/jdk7u/archive/refs/tags/jdk7u351-ga.tar.gz


关于BootstrapJDK

但凡是遇到了bootstrap这样的字眼,它所要解决的问题只有一个,那就是,当你掉进一个井里,你需要通过拉自己的靴子,把自己拉出井以实现自救。这是个哲学问题。言归正传,之所以需要bootstrapJDK,是因为jdk的编译过程需要执行java代码,也就是说 需要一个能正常运行的jdk存在。编译自己需要自己的存在!一般而言,这个bootstrapJDK由你当前编译jdk版本的上一个版本担当。

编译环境

本次编译使用的系统:GNU/Linux 发行版debian11

编译器:gcc-9.2.0

BootstrapJDK:jdk6

ant:apache-ant-1.7.1

开始编译jdk7u351-ga

首先我们建立一个干净的目录buildjdk,然后进入到这个目录中。

从上面的链接下载jdk7u351-ga的源代码包,然后解压会得到一个目录jdk7u-jdk7u351-ga。

jdk7u源代码目录介绍

目录名称介绍
hotspotOpenJDK Hotspot Virtual Machine,这里包含着虚拟机的源代码和构建文件。
langtoolsjava语言的工具源码,例如javac、javap、javah等
corbajava中间件corba的源码目录和构建文件。
jaxwsjava webservice相关的源代码目录。
jaxpjava解析xml相关的源代码目录。
jdkOpenJDK的运行时库的源文件目录。

编译依赖工具

名称说明
Bootstrap JDK编译JDK需要使用的一个预先存在的jdk,这里我们使用JDK6。
下载地址:https://www.oracle.com/au/java/technologies/javase-java-archive-javase6-downloads.html
antant构建工具,编译JDK7时也需要用到。
下载地址:http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip
gccgcc工具,这里特别注意,在编译jdk7时gcc版本>=10的话出现各种编译问题。官网要求的gcc最低版本为4.3,本教程使用gcc-9.2成功编译。
zip和unzipzip工具版本>=2.2,unzip工具>=5.12。如果你的linux发行版的源上没有符合条件的版本可从这里下载自行安装。
下载地址:http://www.info-zip.org
Common UNIX Printing System (CUPS) Headerscpus的头文件,这个头文件一般可以通过在你的linux发行版上安装其对应的开发包获得。
XRender Extension HeadersXRender头文件,通向安装其对应的开发包即可。
FreeType 2FreeType的版本>=2.3,较新版本的linux发行版从源中安装的这个软件的默认目录可能与jdk7的默认搜寻路径不符,本教程中直接从源码边一个,后面会讲解。
下载地址:http://www.freetype.org
Advanced Linux Sound Architecture (ALSA)ALSA版本>=0.9.1。这个建议使用你自己的linux发行版的源进行安装。通常你可以使用关键字libasound在你的源中搜索,找到合适的版本进行安装。

编译选项

make选项说明
all构建一个完整的jdk,这也是默认选项。如果你直接执行make命令将执行这个选项规则。
help输出编译选项帮助信息。例如:make help
sanity检测编译环境的设置以及需要的依赖是否正确。例如:make sanity
clean清除编译时产生的临时文件。

环境变量设置

jdk7的编译行为很多都是由环境变量控制的,所以我们需要设置必要的环境变量。

环境变量名说明
ALT_BOOTDIR这个环境变量需要指定到Bootstrap JDK的安装目录,就是我们下载的那个jdk6安装包执行后得到的目录。
ALT_FREETYPE_LIB_PATH指向freetype2的安装目录下的lib目录
ALT_FREETYPE_HEADERS_PATH指向freetype2的安装目录下的include目录

gcc-9.2.0编译:

如果你使用的就是这个版本或者你想通过你的源来安装这个版本可跳过此步。

我们按照一下给出的版本进行下载对应的源码包。

注意,你需要找一个比较大的分区来编译gcc,因为gcc在编译过程中需要消耗大量的磁盘空间。你的剩余空间应该>=4.2GB

gcc-9.2.0:https://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz

gmp-6.2.0:https://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.bz2

mpc-1.1.0:https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz

mpfr-4.0.2:https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.bz2

编译gcc需要切换到root权限下。

su root

解压缩gcc-9.2.0.tar.gz并进入到gcc的根目录:

tar -xvf gcc-9.2.0.tar.gz 
cd gcc-9.2.0

然后解压缩mpfr-4.0.2.tar.bz2、mpc-1.1.0.tar.gz、gmp-6.2.0.tar.bz2,这三个包需要在gcc的源代码目录下解压,并且将其重名并把对应的版本号去掉。

tar -xvf gmp-6.2.0.tar.bz2
mv gmp-6.2.0 gmp
tar -xvf mpc-1.1.0.tar.gz
mv mpc-1.1.0 mpc
tar -xvf mpfr-4.0.2.tar.bz2
mv mpfr-4.0.2 mpfr

至此我们都需要在gcc-9.2.0的源代码根目录下

如果你的系统是64位的请在此目录下执行以下命令

sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64

然后执行命令

sed -e '1161 s|^|//|' \
-i libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 

然后我们在此目录下新建一个build目录并进入到build目录下

mkdir -v build
cd build 

然后执行编译前的检测命令

SED=sed \
../configure --prefix=/usr \
--enable-languages=c,c++ \
--disable-multilib \
--disable-bootstrap \
--with-system-zlib 

然后开始执行make命令,下面的-j12是平行编译,可以根据你自己的cpu核心数指定,我的是12核的。

make -j12

编译完成后执行安装命令

make install

编译freetype2

先下载freetype2:https://download.savannah.gnu.org/releases/freetype/freetype-2.12.1.tar.gz

解压freetype-2.12.1.tar.gz,并进入freetype源代码目录

tar -xvf freetype-2.12.1.tar.gz
cd freetype-2.12.1

执行编译前检查命令:

./configure --prefix=自定义一个路径。   注意这里我们不要使用默认的路径,会污染你的当前系统。

然后编译安装,注意要记住安装路径,一会我们要用到。

make
make install

安装ant构建工具

下载ant:http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip

我们直接将其解压到buildsdk目录下即可

unzip apache-ant-1.7.1-bin.zip

设置环境变量

export PATH=ant安装目录/bin:$PATH
export ALT_BOOTDIR=jdk6的安装目录
export ALT_FREETYPE_LIB_PATH=刚才安装的freetype2安装目录/lib
export ALT_FREETYPE_HEADERS_PATH=刚才安装的freetype2安装目录/include

注意你不能设置JAVA_HOME环境变量。

如果你的环境中存在JAVA_HOME环境变量,你需要删除这个环境变量

unset JAVA_HOME

好了准备工作已经完成了我们可以开始真正的编译jdk7u了

首先我们需要先修复一个jdk7中存在的一个bug
修复文件为:jdk7u-jdk7u351-ga/hotspot/src/share/vm/runtime/os.cpp:1197行
将代码:strncpy(inpath, path, strlen(path));修改为 strcpy(inpath,path);

jdk7的编译环境检测,此命令最后输出:Sanity check passed.就可进行下一步了

make sanity

执行编译命令:

make all

经过漫长的等待你将会看到如下输出

89ed7c425abed6cc2b93cc5f806f1101.jpeg

至此我们jdk7u的编译就成功了,编译好的内容都放在路径:jdk7u-jdk7u351-ga/build/linux-amd64中

目录介绍

目录名称说明
j2re-image这个目录就是我们平时用到的jre,可以将其重命名为jre7u351,然后放到一个合适的地方我们就可以直接使用啦!
j2sdk-image这就是我们平时用的jdk,我们可以将其命名为jdk7u351。然后我们就能正常使用啦!

接下来让我们测试一下吧

进入目录jdk7u-jdk7u351-ga/build/linux-amd64/j2sdk-image/bin

执行命令:./java -version

91e31c9fcb27aec870dd918e6a1cdd27.png

我们看到了正常的版本输出。成功!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词