Со всеми серьезными изменениями, внесенными в Java 9, я до сих пор не могу остановиться на Oracle Java 8. Но я понял, что было бы интересно перейти на последний OpenJDK и даже поработать с ним, чтобы добавить некоторые незначительные функциональные возможности. Это означает сборку и отладку JDK локально.
Итак, я сначала пошел к официальному зеркалу git OpenJDK по адресу https://github.com/openjdk/jdk и следовал инструкциям в doc / building.html, установив цепочку инструментов, как показано ниже:
- Я нахожусь на 64-битной Windows 10, автоматически обновляемой с последними исправлениями, по умолчанию на французском языке.
- Я уже получил Windows SDK 7.1, DirectX SDK (июнь 2010 г.)).
- Я обновил Visual Studio 2017 до последней версии (15.9.17).
- Я обновил установку Cygwin со всеми последними версиями всех двоичных файлов.
- JAVA_HOME указывает на OpenJDK 13.0.1 64-bit.
После клонирования главной ветви JDK с помощью git я открыл окно командной строки Cygwin и сделал следующее:
ln -s /cygdrive/f/<path to local openjdk repo> ./OpenJDK
cd OpenJDK
bash configure
ИЯ получил ошибку, очевидно, потому что мой git для Windows создал исходный код с EOL = CrLf вместо просто Lf, как и ожидалось инструментами POSIX. Поэтому я удалил клонированное хранилище и следовал разделу TL; DR в doc / building.html, то есть в командном окне Cygwin я сделал следующее:
hg clone http://hg.openjdk.java.net/jdk/jdk
cd jdk
bash configure
Настройка не может распознать cl.exe из Visual Studio 2017, потому чтовсе было по-французски ... Поэтому я изменил настройку 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)
Кто-нибудь пробовал это недавно и нашел способ заставить его работать?