Сделай сам, скомпилируй отлаживаемый JDK в macOS High Sierra

задняя часть Debug исходный код macOS
Сделай сам, скомпилируй отлаживаемый JDK в macOS High Sierra

задний план

Так как я недавно хотел проанализировать несколькоnativeметод, поэтому вам нужно иметь под рукой тот, который можетdebugизJDK, Поэтому за последние два дня я накидал, наступил на 10+ ям, прочитал 10+ статей, попробовал 10+ раз и наконец-то получил.JDKЯ скомпилировал это, когда сам скомпилировалJDKзапускать наjavac -versionПосле вывода знакомого текста я чувствуюуже старые слезыВсе еще очень успешно.

Предварительная подготовка

  • Узнать об OpenJDK: то, что мы хотим скомпилировать,Open JDK 9u
  • УстановитьHomebrew(по желанию)
  • Фаню Тусуй: Потому что если при компиляции возникает ошибка, нужно искать неправильное решение через несуществующий сайт.
  • Получите хороший редактор исходного кода: потому что, если повезет [забавно], нам может понадобиться изменитьJDKMyaa в исходном коде (использую mscode)
  • установить одинBoot JDK: так какJDKМного кодаJavaНаписано, так что хочу собратьJDKнужно использовать другойJDKЧтобы помочь (куриные яйца, яйца и цыплята/дергать себя за волосы и подтягиваться), я установил официальный OracleJDK
  • Установитьfreetype: это зависимостьbrew install freetype
  • УстановитьXcode

Описание среды

  • Операционная система:macOS High Sierra Version: 10.13.3 (17D47)
  • Boot JDK: 1.8.0_161
  • freetype: 2.9
  • Xcode: Version 9.2 (9C40b)
  • Open JDKИсходный код:jdk9u-2e265b4b8622 corba-2ef36e70f490 hotspot-bb73b31e70e3 jaxp-95a71f690b44 jaxws-f4f878b5f01c jdk-a779673ab57d langtools-e2bf77b3f002 nashorn-fb3f7ae74bf6

Яма, через которую прошли мои предшественники / Яма, через которую прошел я

  1. не компилироватьJDK 8: потому что для компиляции 8 требуетсяXcode 4в настоящее времяXcodeВерсия гораздо выше 4 (эту яму обнаружили предшественники, я конечно не верю в зло, а потом сам прошел через нее, и обнаружил, что это действительно яма)
  2. попробуй не использоватьMercurialспустисьOpen JDK, и используйте браузер для прямой загрузки упакованного исходного кода: потому что вам нужно использоватьMercurialзагруженOpen JDKПосле проекта верхнего уровня вам также необходимо выполнитьget_source.shДля скачивания исходников своих подпроектов этот процесс долгий и процент отказов высокий (ключ еще не реализовал процентную подсказку, сухой и т.д.), гораздо быстрее скачать сжатые пакеты всех подпроектов -проекты самостоятельно с помощью браузера, и вероятность успеха100%(Я вышел сам, и все предыдущие статьи говорили мне использоватьMercurial, результат яма)
  3. компилироватьJDK 9uвместоJDK 9потому что я собирал9Есть много ошибок, когда я хочу принестиuБудет ли лучше, конечно, это во многом мои догадки, возьму позже9uделал, не пробовал9, если вам интересно, вы можете посетить это самостоятельно
  4. configureобязательно принесите--disable-warnings-as-errorsэтот параметр, иначеwarningтакже прервет процесс компиляции, на самом деле этиwarningНе влияет на скомпилированную цельJDKбегать

идти процесс

Если за несколько часов доТы готов,Также следует обратить внимание, затем начните компилировать с процессом.Если вы сообщаете об ошибке (есть большая вероятность этого), не роняйте клавиатуру, используйте не упомянутое выше.можно описатьСуществующие веб-сайты пришли, чтобы найти ответ. Я пересек реку, ощупывая камни, и пробовал это неоднократно в течение 2 дней. Господин Лу Синь хорошо сказал:"пока ты очень стараешься, ты можешь добиться чего угодно",удачи! !

step0

Все вышеперечисленные препараты

step1

Загрузите пакет исходного кода

Разархивируйте загруженный пакет исходного кода и поместите его в соответствии с кодом уровня официальной библиотеки исходного кода.

step2

Выполнить в каталоге верхнего уровня исходного кодаsh configure --with-debug-level=slowdebug --disable-warnings-as-errors --with-freetype-include=/usr/local/Cellar/freetype/2.9/include/freetype2 --with-freetype-lib=/usr/local/Cellar/freetype/2.9/lib(Место с номером версии должно быть изменено в соответствии с реальной ситуацией.) Если на этом шаге нет проблем, вы должны увидеть этот вывод:

step3

Если ваша среда сборки и версия исходного кода точно такие же, как у меня, то неmake all, давайте сначала исправим одинbug:(патч здесь) Эта ошибка вызоветmakeСообщить об этом:error: ordered comparison between pointer and zero ('char *' and 'int') 。。。此处省略

Открытымhotspotв каталоге

  • src/share/vm/memory/virtualspace.cppискать средиif (base() > 0) {изменить наif (base() != NULL) {
  • src/share/vm/opto/lcm.cppискать средиif (Universe::narrow_oop_base() > 0) {изменить наif (Universe::narrow_oop_base() != NULL) {
  • src/share/vm/opto/loopPredicate.cppискать средиassert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int() >= 0, "must be");изменить наassert(rng->Opcode() == Op_LoadRange || iff->is_RangeCheck() || _igvn.type(rng)->is_int()->_lo >= 0, "must be");

step4

make allВремя компиляции немного больше.Моя машина MacBook Pro 2017 года, и это заняло около 20+ минут (не считал внимательно), и вентилятор во время процесса компиляции работал бешено.Для ноутбуков обратите внимание на оставшуюся мощность и тепловыделение.Если компиляция прошла успешно, укажитеjavacПройти полный путьjavac -versionВзгляни

Если сообщается об ошибке, конкретная ошибка будет подробно проанализирована. Поскольку среда компиляции отличается, ошибка также может быть другой. Перейдите на несуществующий веб-сайт, чтобы найти решение, и вы добьетесь успеха, проявив терпение и удача.

Суммировать

Я думал сделать одинJDKКак это ни сложно, оказывается: это не сложно, но много ям и заморочек.Я пробовал более 10 раз до и после, и в общей сложности это заняло два дня.От попыток собратьJDK 8снова9В середине были различные проблемы, и я хотел сдаться в какой-то момент, но, поскольку я хотел использовать его для достижения более дальней цели, я все же настаивал на том, чтобы получить его, и, наконец, преуспел с помощью поисковой системы и предшественников. , так что это все та же фраза: «Пока кунг-фу глубоко и железный пестик переткнут в иглу», следуйте правильному направлению, повторяйте попытки и, наконец, добейтесь успеха.

использованная литература

Building OpenJDK 8 on Mac OS X Mavericks

Building and Packaging OpenJDK9 for OSX

Compilation errors with clang-4.0

OpenJDK / jdk10 / jdk10 / hotspot changeset 13502:316854ef2fa2

Ordered comparison between pointer and zero ('char *' and 'int') error #5

MAC-компиляция OpenJDK8

Compile&Debug openjdk

openjdk code compilation/ IDE setup

Используйте Clion (GDB) для отладки небольшого исходного кода JVM.

Решите проблему, из-за которой GDB не может быть отлажен под Mac

xcode-select active developer directory error

Mac OsX Sierra - Stuck on binaryTreeDictionary.hpp compilation