在Windows 10上构建OpenJDK 14

时间:2019-10-21 06:54:11

标签: java windows visual-studio-2017 windows-10

在Java 9引入了所有主要更改之后,直到现在,我仍然停留在Oracle Java 8上。但是我发现,迁移到最新的OpenJDK甚至修补它以添加一些次要功能都是很有趣的。这意味着在本地构建和调试JDK。

因此,我首先在https://github.com/openjdk/jdk进入了OpenJDK的官方git镜像,并按照doc / building.html中的说明安装了如下所示的工具链:

  • 我在Windows 10 64位上自动更新了最新补丁程序,默认为法语。
  • 我已经拥有Windows SDK 7.1,DirectX SDK(2010年6月)。
  • 我将Visual Studio 2017更新为最新版本(15.9.17)。
  • 我使用所有二进制文件的所有最新版本更新了Cygwin安装。
  • JAVA_HOME指向OpenJDK 13.0.1 64位。

使用git克隆JDK的master分支后,我打开Cygwin命令窗口并执行以下操作:

ln -s /cygdrive/f/<path to local openjdk repo> ./OpenJDK
cd OpenJDK
bash configure

我得到一个错误,显然是因为我的Windows git使用EOL = CrLf创建了源代码,而不是POSIX工具所期望的Lf。因此,我删除了克隆的存储库,并遵循doc / building.html的TL; DR部分,即在Cygwin命令窗口中,执行了以下操作:

hg clone http://hg.openjdk.java.net/jdk/jdk
cd jdk
bash configure

Configure无法从Visual Studio 2017中识别cl.exe,因为所有内容都是法语...因此我通过将UI语言从法语更改为英语来修改了VS2017的设置,并且configure一切正常。因此,我继续下一步:

make images

在这里,我遇到了有关本机代码链接的各种错误,而且我真的不知道如何解决它们……在网络上,只有一些博客介绍了如何构建OpenJDK 8,在边缘OpenJDK 14上却一无所获。我得到的错误摘录:

Compiling 1651 files for jdk.internal.vm.compiler
Compiling 108 files for jdk.aot
spaceDecorator.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
sparsePRT.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
tenuredGeneration.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
shenandoahRuntime.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
shenandoahTraversalGC.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
shenandoahVerifier.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)
space.obj : error LNK2001: unresolved external symbol "public: class oopDesc * __cdecl ShenandoahBarrierSet::oop_load_from_native_barrier(class oopDesc *,unsigned int *)" (?oop_load_from_native_barrier@ShenandoahBarrierSet@@QEAAPEAVoopDesc@@PEAV2@PEAI@Z)

最近有人尝试过这种方法吗?找到了使它起作用的方法吗?

0 个答案:

没有答案