JVM进阶1--Windows10编译OpenJDK8

研究一下openjdk在Windows下的编译过程,建议采用Linux环境下编译。

openjdk中代码由java,c++,c语言共同完成,因此需要jdk以及c++编译环境支持。

环境准备

1. Windows10  64操作系统  安装jdk1.7版本以上。

2. cygwin 3.0.6.  http://www.cygwin.com/

3. freeType 2.7  https://download.savannah.gnu.org/releases/freetype/

4. vs2010

5. openjdk1.8     http://jdk.java.net/java-se-ri/8

以上软件可以从该处获取:https://blog.csdn.net/wqlinloveruby/article/details/80409031

链接:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密码:yjqh

环境安装

1.cygwin安装

下载地址:http://www.cygwin.com/

    

cygwin模拟Linux环境的软件,相当于一个虚拟机,主要编译工作在这里进行。cygwin软件很多,这里只选择需要的软件安装即可

                       

启动安装程序

                 

选择合适站点,具体站点选择可根据自己网络情况来选择,可参考  https://cygwin.com/mirrors.html

                                                     

具体cygwin软件安装过程,结合category以及search来搜索需要的包,点击New来选择版本安装

                                 

基本软件安装完成,配置环境变量Path,将cygwin bin目录配置到path环境目录下

                                                                  

2.安装VS2010

下载地址:链接:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密码:yjqh

解压iso文件,setup.exe进行安装

                   

安装VS2010完成。

3.安装freeType

下载地址:https://download.savannah.gnu.org/releases/freetype/

解压,利用vs2010来编译freeType产生静态以及动态链接库

利用VS2010打开freetype-2.7\builds\windows\vc2010

                      

                                         

静态链接库编译

右击项目属性,配置参数如下:

                 

配置Configuration Manager

                    

右击Build,开始编译

动态链接库开始编译

        

右击Build开始编译,编译结果:freetype-2.7\objs\vc2010\x64

     

将编译文件放置到freeType安装目录下新建lib目录,放入其中

           

  

配置环境变量FREETYPE_CFLAGS=freetype-2.7\include;FREETYPE_LIBS=freetype-2.7\lib,以及path路径

    

                                                              

4.下载openjdk1.8

下载地址:http://jdk.java.net/java-se-ri/8

                 

解压,在正式编译以前,阅读参考文档openjdk-8u40-src-b25-10_feb_2015/openjdk/README-builds.html

                       

编译环境检查

打开cygwin,切换到openjdk1.8解压目录下

cd  /cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk

执行编译环境检查命令:

bash ./configure -with-freetype=/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/freetype-2.7 -enable-debug -with-target-bits=64

具体的配置参数可以参考文档README-builds.html

                                         

这里首先执行编译环境检查,由于不同版本可能会遇到不同问题,这里可以结合文件

openjdk-8u40-src-b25-10_feb_2015\openjdk\common\autoconf\generated-configure.sh来解决

编译检查通过显示如下:

   

编译检查过程中可能遇见的问题

1. 

Could not find cpio\Could not find unzip! \Could not find zip!

由于cygwin安装软件不完整而导致,重新安装cygwin,确保以下软件安装完成

                        

2.

checking cygwin release... 3.0.6(0.338/5/3)

configure: Your cygwin is too old. You are running 3.0.6(0.338/5/3), but at least cygwin 1.7 is required. Please upgrade.

configure: error: Cannot continue

configure exiting with result code 1

           

由于检查脚本bug导致:修改文件generated-configure.sh,注释cygwin版本检查部分

      

3.

configure: error: Target CPU mismatch. We are building for x86_64 but CL is for ""; expected "x64".

修改文件generated-configure.sh,注释以下部分,有两部分需要注释

还可能遇到的问题

4.

checking if the first found link.exe is actually the Cygwin link tool... yes
configure: Cannot locate a valid Visual Studio installation, checking current environment
checking for Visual Studio variables... not found
configure: Cannot locate a valid Visual Studio or Windows SDK installation on disk,
configure: nor is this script run from a Visual Studio command prompt.
configure: Try setting --with-tools-dir to the VC/bin directory within the VS installation
configure: or run "bash.exe -l" from a VS command prompt and then run configure from there.
configure: error: Cannot continue
configure exiting with result code 1

                              

执行编译检查时,配置参数-with-target-bits,路径要与本地VS2010路径相对应。

bash ./configure -with-freetype=/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/freetype-2.7 -enable-debug -with-target-bits=64 with_toolsdir="/cygdrive/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin" --disable-ccache

开始编译

/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk目录下,执行make all

编译结果输出目录openjdk-8u40-src-b25-10_feb_2015\openjdk\build\windows-x86_64-normal-server-fastdebug

编译最终结果

                                  

测试一下编译之后的jdk版本信息

下面是之前安装的jdk1.8 

编译过程可能遇到各种各样的问题以及编译错误,可以查阅资料来解决,重新编译

make clean && make all

编译过程中可能遇见的问题

libcpmt.lib(newaop.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
libcpmt.lib(xlock.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
libcpmt.lib(uncaught.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
libcpmt.lib(xthrow.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
libcpmt.lib(locale0.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
libcpmt.lib(iosptrs.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
MSVCRT.lib(ti_inst.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1900' in main.obj
## Starting hotspot
make[2]: 警告: 子 make 中强制 -jN: 关闭 jobserver 模式。
INFO: ENABLE_FULL_DEBUG_SYMBOLS=1
D:\openjdk-8u40-src-b25-10_feb_2015\openjdk\hotspot/make/windows/get_msc_ver.sh: 第 65 行:[: ▒▒▒▒ x64 ▒▒ Microsoft (R) C/C++ ▒Ż▒▒▒▒▒▒▒ 19: 需要整数表达式
/usr/bin/expr: 语法错误
NMAKE : fatal error U1077: ▒▒sh▒▒: ▒▒▒ش▒▒롰0x2▒▒
Stop.
make[3]: *** [Makefile:231:generic_build2] 错误 2
make[2]: *** [Makefile:177:fastdebug] 错误 2
make[1]: *** [HotspotWrapper.gmk:45:/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/windows-x86_64-normal-server-fastdebug/hotspot/_hotspot.timestamp] 错误 2
make: *** [/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk//make/Main.gmk:109:hotspot-only] 错误 2

             

查看cl.exe版本  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe

执行该目录下cl.exe报错:VS2010目录下cl.exe,dumpbin.exe找不到mspdb100.dll的问题

       

参考地址:https://blog.csdn.net/sptoor/article/details/8892315?utm_source=blogxgwz3

执行代码:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"

  

再次执行cl.exe,查看版本16.00.30319.01

  

修改配置文件\openjdk-8u40-src-b25-10_feb_2015\openjdk\hotspot\make\windows   get_msc_ver.sh

WARNING: Path does not exist as file or directory: jdk\jfr
make[2]: *** [CreateJars.gmk:268:/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/windows-x86_64-normal-server-fastdebug/images/lib/_the.rt.jar.contents] 错误 1
make[2]: *** 正在等待未完成的任务....
make[1]: *** [BuildJdk.gmk:101:images] 错误 2
make: *** [/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk//make/Main.gmk:136:images-only] 错误 2

              

参考链接https://my.oschina.net/langxSpirit/blog/1624428

进入cygwin,用vi打开C:\openjdk\jdk\make\CreateJars.gmk,268行附近。在VI下,可输入268gg。仅两处要改,原因是Linux和Winodws换行符不同,造成了之后再编译images target时失败,因为在gmk中会通过grep命令将class文件导出,而如果不做改动则会因换行符问题导致文件大小为零,也就无法进行下一步。在这里卡了好久,最后还是看到OpenJDK的mailing list中,也有人遇到相同的问题。在我的机器上是遇到了此问题,阁下的环境我不得而知,如果不用改动就能编译过,那最好不过啦。修改如下:

在VI输入状态下,按Ctrl + V, Ctrl + M,即可打出^M。保存退出。

[Error] encoded value was less than 0: encode(-8.326673E-17, 5.0, 11.0, 16.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] Encountered Infinity: encode(-0.00877193, 0.0, 7.0, 7.0)

https://bugs.openjdk.java.net/browse/JDK-8016451好像是个bug,先不处理。

使用的操作命令

cd  /cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/openjdk

bash ./configure -with-freetype=/cygdrive/d/openjdk-8u40-src-b25-10_feb_2015/freetype-2.7 -enable-debug -with-target-bits=64

./configure -with-freetype=/cygdrive/d/MyWorkSpace/freetype-2.9.1/ -enable-debug -with-target-bits=64 with_toolsdir="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build" --disable-ccache

bash ./configure --with-freetype=/cygdrive/d/dev/freetype -with-target-bits=64 --with-tools-dir="/cygdrive/d/vs2015/VC/bin"  --with-toolchain-version=2015

参考链接:

https://blog.csdn.net/wqlinloveruby/article/details/80409031

https://blog.csdn.net/a510835147/article/details/73011498

https://blog.csdn.net/ciqingloveless/article/details/81950308

https://blog.csdn.net/LPWSTR/article/details/78849587

https://www.jianshu.com/p/e85f93cc74cb

https://blog.csdn.net/wd2014610/article/details/81703203

https://www.cnblogs.com/dennyzhangdd/tag/jdk%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/

https://my.oschina.net/langxSpirit/blog/1624428

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
编译 OpenJDK 16 需要以下步骤: 1. 安装必要的依赖项 在编译 OpenJDK 16 前,需要安装一些必要的依赖项。在 Ubuntu 系统上,可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install build-essential zip unzip libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev libfontconfig1-dev libxrandr-dev libXi-dev libgif-dev libjpeg-turbo8-dev libpng-dev libbz2-dev libgtk-3-dev autoconf libtool libxml2-dev libxslt1-dev python3-dev libffi-dev libssl-dev liblzma-dev ``` 2. 下载 OpenJDK 16 源代码 可以从官方网站下载 OpenJDK 16 源代码压缩包,也可以使用以下命令从 Github 上下载: ``` hg clone http://hg.openjdk.java.net/jdk-updates/jdk16u/ cd jdk16u ``` 3. 配置环境变量 在编译 OpenJDK 16 前,需要设置以下环境变量: ``` export LANG=C export ALT_BOOTDIR=/path/to/your/boot/jdk export PATH=$ALT_BOOTDIR/bin:$PATH ``` 其中,`ALT_BOOTDIR` 是指你已经安装的 JDK 的路径。 4. 配置编译选项 OpenJDK 16 源代码根目录,使用以下命令配置编译选项: ``` bash configure --with-toolchain-type=clang \ --with-jvm-features=shenandoahgc,zgc \ --with-target-bits=64 \ --with-sysroot=/path/to/your/sysroot \ --disable-warnings-as-errors \ --with-debug-level=slowdebug ``` 其中,`--with-toolchain-type` 指定使用 clang 工具链,`--with-jvm-features` 指定使用 ShenandoahGC 和 ZGC 内存管理器,`--with-target-bits` 指定编译 64 位版本的 OpenJDK,`--with-sysroot` 指定 Android 平台的 sysroot 路径,`--disable-warnings-as-errors` 禁用将警告视为错误的选项,`--with-debug-level` 指定调试级别。 5. 编译 OpenJDK 16 使用以下命令编译 OpenJDK 16: ``` make images ``` 6. 安装 OpenJDK 16 编译完成后,可以使用以下命令将 OpenJDK 16 安装到指定目录: ``` make install DESTDIR=/path/to/install ``` 其中,`DESTDIR` 指定安装目录。 以上就是使用 aarch64-linux-android23-clang 工具链编译 OpenJDK 16 的详细步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值