задний план
Так как я недавно хотел проанализировать несколько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-2e265b4b8622corba-2ef36e70f490hotspot-bb73b31e70e3jaxp-95a71f690b44jaxws-f4f878b5f01cjdk-a779673ab57dlangtools-e2bf77b3f002nashorn-fb3f7ae74bf6
Яма, через которую прошли мои предшественники / Яма, через которую прошел я
- не компилировать
JDK 8: потому что для компиляции 8 требуетсяXcode 4в настоящее времяXcodeВерсия гораздо выше 4 (эту яму обнаружили предшественники, я конечно не верю в зло, а потом сам прошел через нее, и обнаружил, что это действительно яма) - попробуй не использовать
MercurialспустисьOpen JDK, и используйте браузер для прямой загрузки упакованного исходного кода: потому что вам нужно использоватьMercurialзагруженOpen JDKПосле проекта верхнего уровня вам также необходимо выполнитьget_source.shДля скачивания исходников своих подпроектов этот процесс долгий и процент отказов высокий (ключ еще не реализовал процентную подсказку, сухой и т.д.), гораздо быстрее скачать сжатые пакеты всех подпроектов -проекты самостоятельно с помощью браузера, и вероятность успеха100%(Я вышел сам, и все предыдущие статьи говорили мне использоватьMercurial, результат яма) - компилировать
JDK 9uвместоJDK 9потому что я собирал9Есть много ошибок, когда я хочу принестиuБудет ли лучше, конечно, это во многом мои догадки, возьму позже9uделал, не пробовал9, если вам интересно, вы можете посетить это самостоятельно -
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
openjdk code compilation/ IDE setup
Используйте Clion (GDB) для отладки небольшого исходного кода JVM.
Решите проблему, из-за которой GDB не может быть отлажен под Mac
xcode-select active developer directory error
Mac OsX Sierra - Stuck on binaryTreeDictionary.hpp compilation