Эта статья в основном знакомит сMacOS
система иUbuntu
Как скомпилировать в системеOpenJDK
код проекта и использоватьIDE
инструментJetBrains CLion
(именуемый в дальнейшемCLion
) для запуска/отладкиOpenJDK
. Включены только определенные версии двух операционных систем (MacOS 10.15
иUbuntu 16.04
), в разных версиях могут быть небольшие отличия. Надеюсь иметь некоторую справочную ценность для читателей.
В целом, составлениеOpenJDK11
В обеих системах не так много препятствий, а сложность ниже, чемOpenJDK8
. компилироватьOpenJDK8
существуетUbuntu
относительно просто, вMacOS
сложнее.
Основные шаги для компиляции и отладки OpenJDK
Компиляция и отладкаOpenJDK
Процесс можно разделить на следующие этапы:
- Получать
OpenJDK
Исходный код проекта - Скачать подходящую версию
JDK
в видеBootJDK
- Загрузите необходимый набор инструментов, включая компиляторы, отладчики, инструменты сборки и т. д.
- Скачать необходимые зависимости
-
Running Configure
(конфигурация) -
Running Make
(Построить) - Импортировать
CLion
и выполнятьRun/Debug
настроить
Среди них 3-6 шагов разные для разных операционных систем и разныхOpenJDK
Разница между версиями велика, а разница между другими шагами невелика, поэтому порядок этой статьи таков: сначала подробно представить три части 1-2, 7 и некоторые предварительные знания. После определенных сценариев (разные ОС + разныеOpenJDK
Версия) для специальных инструкций, которые только делают различия между этими частями.
до начала
Как я могу получить исходный код OpenJDK?
Первым шагом в компиляции и отладке, конечно же, является получениеOpenJDK
Есть три основных способа получить исходный код:
1. ПройтиOpenJDK
ОфициальныйMercurial
Склад скачать
OpenJDK
официальное использованиеMercurial
для контроля версий.Mercurial
Адрес склада:hg.openjdk.java.net/, основной адрес проекта:
проект | адрес |
---|---|
jdk | hg.openjdk.java.net/jdk/jdk |
jdk8u | Korea.open JDK.Java.net/JDK8U/JDK8U… |
jdk11u | Korea.open JDK.java.net/JDK-updates… |
Чтобы скачать исходный код таким способом, его нужно сначала установитьMercurial
инструменты и использоватьhg clone <url>
Загрузите исходный код. например скачатьjdk8u
Используйте следующую команду:
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/
Этот метод загружается медленнее, и будут прерывания.Не рекомендуется.
2. ОтзеркаливаниемGit
Загрузка со склада
Официальный представитель OpenJDK вGitHub
По адресу главной страницы размещено складское изображение проекта JDK:github.com/openjdk, основной адрес проекта:
проект | адрес |
---|---|
jdk | github.com/openjdk/jdk |
jdk11u | GitHub.com/openJDK/JDK… |
jdk12u | GitHub.com/openJDK/JDK… |
но в официальномgit
на складе не виделjdk11
следующие версии.
Кроме того, есть несколько неофициальных зеркал.Git
склад. НапримерAdoptOpenJDK
Проект, адрес домашней страницы:GitHub.com/adopt открыть JD…, основной адрес проекта:
проект | адрес |
---|---|
jdk | GitHub.com/adopt открыть JD… |
jdk8u | GitHub.com/adopt открыть JD… |
jdk11u | GitHub.com/adopt открыть JD… |
Используйте этот способ, который вам нужно установитьgit
инструменты и использоватьgit clone <url>
Загрузите исходный код. например скачатьjdk8u
Используйте следующую команду:
git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u
git
Инструмент прост в использовании и лучше, чем официальныйMercurial
Загрузка со склада происходит намного быстрее,Рекомендуемое использование.
3. СкачатьMercurial
склад илиGit
файл пакета склада
Кроме,OpenJDK
ОфициальныйMercurial
Хранилище также предоставляет запись для прямой загрузки сжатого пакета, запись находится в левой части каждой страницы проекта.bz2
,zip
,gz
Три ссылки, нажмите, чтобы скачать. Как показано ниже:
Также вGitHub
Каждый элемент можно скачатьZIP
форматировать пакетный файл. Как показано ниже:
Очевидно, что недостатком этого метода является отсутствие возможности контроля версий, если вы вносите изменения в код проекта, вы не можете восстановить его, и вы не можете легко получить последние изменения кода, но он быстрее загружается, чем первые два метода. ., и без всяких дополнительных инструментов.
Как скачать JDK?
Парадоксально, но перед компиляцией JDK нам нужен уже скомпилированныйJDK
в видеBoot JDK
.一般需要的JDK
Версия является предыдущей версией скомпилированной версииJDK
, такие как компиляцияJDK8
необходимостьJDK7
, скомпилироватьJDK11
необходимостьJDK10
.
Есть несколько способов скачатьJDK
:
- существуетофициальный сайт Ораклскачать
Oracle JDK
. Для скачивания требуется учетная запись - скачать
OpenJDK
- существуетjdk.java.net/можно найти
Oracle
предусмотрено на основеOpenJDK
эталонная реализация. Но в основном толькоLinux
Версия - Вы также можете использовать предварительно скомпилированные файлы других организаций.
OpenJDK
. НапримерAdoptOpenJDK,ноjdk8
следующие версии
- существуетjdk.java.net/можно найти
- существует
Linux
Под системой вы также можете использовать менеджер пакетов (например,Ubuntu
внизapt
,Centos
внизyum
)Загрузить и установитьJDK
JSON Compilation Database
CLion
правильноCMake
Поддержка проекта сборки является дружественной, ноOpenJDK
Проект основан наMake
Построен, для использованияMake
построенный проект,CLion
все еще проходитCompilation Database
импортировать проект, не изменяя его вCMake
проект. также может пройтиCompilation Database
Реализовать анализ кода, прыжок и другие функции, которые нам очень помогают при отладке кода.
оCompilation Database
Для введения вы можете обратиться к этим статьям:
-
Clang
ОфициальныйCompilation Database
Страница введения:Спецификация формата базы данных компиляции JSON — документация Clang 11 - В этой статье описывается, как генерировать в различных сценариях
Compilation database
Различные инструменты для:База компиляций — Блокнот сарказма -
CLion
Помогите страницу Краткое введениеCompilation Database
, И вCLion
использование:Compilation Database - Help | CLion
на основеMake
построенOpenJDK
Для проектов есть несколько инструментов для генерацииCompilation Database
, например:
Обычно генерируется по умолчаниюCompilation Database
Являетсяcompile_commands.json
документ.
Кроме того, вOpenJDK 11u
и более поздние версии,OpenJDK
Официально предусмотреноIDE
поддержки, вы можете использоватьmake compile-commands
генерация командCompilation Database
, не нужно использовать дополнительные инструменты, конкретные команды можно посмотреть в каталоге исходного кода\doc\ide.md
Как импортировать проект OpenJDK в CLion и запускать/отлаживать
Читатели могут сначала пропустить этот раздел, а затем следовать этому разделу для импорта и отладки после выполнения предыдущих шагов.
На сколькоCLion
На базе в управленииMake
построенный проект,CLion
В официальной справочной документации есть подробное введение:Managing Makefile Projects.
Ссылаясь на вышеуказанную документацию, в этом подразделе кратко описывается, какCLion
импортировать вOpenJDK
методы проекта и запуска/отладки. Обратите внимание, что диаграммы, показанные в этом подразделе, основаны наUbuntu 16.04
система +CLion 2020.1.1
В окружающей среде шаги операции в основном также применимы кMacOS 系统
та же версия нижеCLion
.
-
Загрузить и установить
CLion
и установитьMakefile Support
плагин. Рекомендуется использовать последнюю версию, более старые версии не поддерживаются.Make
Строительство проекта. -
导入项目。 Открытым
CLion
,выберитеOpen Or Import
, выберите в каталоге проектаcompile_commands.json
файл, всплывающее окно выбораOpen as Project
, дождитесь завершения индексации файла.compile_commands.json
Способ генерации и место генерацииOpenJDK
Версия немного отличается, пожалуйста, обратитесь к введению конкретной сцены ниже для конкретного места. -
Создать пользовательский
Build Target
. нажмитеFile
Строка меню,Settings | Build, Execution, Deployment | Custom Build Targets
, нажмите+
создать новыйTarget
.-
Name
:Target
Название после созданияRun/Debug
Я увижу это имя при настройке. - нажмите
Build
илиClean
Три точки справа во всплывающем окне нажмите+
создать дваExternal Tool
Конфигурация выглядит следующим образом:# 第一个配置如下,用来指定构建指令 # Program 和 Arguments 共同构成了所要执行的命令 "make all" Name: make Program: make Arguments: all Working directory: {项目的根目录} # 第二个配置如下,用来清理构建输出 # Program 和 Arguments 共同构成了所要执行的命令 "make clean" Name: make clean Program: make Arguments: clean Working directory: {项目的根目录}
-
ToolChain
выберитеDefault
;Build
выберитеmake
(Первый созданный вышеExternal Tool
);Clean
выберитеmake clean
(Второй созданный вышеExternal Tool
)
двое из них
External Tool
в конфигурацииmake
Параметры могут быть изменены по мере необходимости. Обычно используется дляBuild
настроить и выполнить время сборкиmake
изtarget
Просто будьте последовательны. -
-
создать пользовательский
Run/Debug configuration
. нажмитеRun
Строка меню,Edit Configurations
, нажмите+
,выберитеCustom Build Application
, настроенный следующим образом:# Executable 和 Program arguments 可以根据需要调试的信息自行选择 # NameL:Configure 的名称 Name: linux-x86_64-normal-server-slowdebug # Target:选择上一步创建的 “Custom Build Target” Target: linux-x86_64-normal-server-slowdebug # Executable:程序执行入口,也就是需要调试的程序 Executable: 这里我们调试`java`,选择`{source_root}/build/{build_name}/jdk/bin/java`。 # Program arguments: 与 “Executable” 配合使用,指定其参数 Program arguments: 这里我们选择`-version`,简单打印一下`java`版本。
Если вы не хотите выполнять каждый раз перед запуском/отладкой
Build
операция (вот онаMake
Процесс построения трудоемкий), с которым можно ознакомиться внизу страницы редактирования.Before launch
поле удалитьBuild
Вход. -
нажмите
Run
/Debug
Начать запуск/отладку.- Если используемый отладчик
gdb
(Ubuntu
по умолчанию), вы можете найти его при отладкеgdb
Ошибка:Signal: SIGSEGV (Segmentation fault)
. Решение состоит в том, чтобы создать создание каталога пользователя.gdbinit
, содержание следующее:handle SIGSEGV pass noprint nostop handle SIGBUS pass noprint nostop
- Если используемый отладчик
lldb
(MacOS
по умолчанию), вы можете найти его при отладкеlldb
Ошибка:SIGSEGV (signal SIGSEGV)
. Решение состоит в том, чтобы создать его в домашнем каталоге пользователя..lldbinit
, содержание следующее:break set -n main -C "process handle --pass true --stop false SIGSEGV" -C "process handle --pass true --stop false SIGBUS"
- Если используемый отладчик
-
Сотрудничать
File Watchers
Plug-In Auto-UpdateCompilation Database
(по желанию)Если код проекта изменен, его необходимо сгенерировать заново.
Compilation Database
, в общем, надо переделывать.Если вы не хотите каждый раз перестраиваться вручную, вы можете использовать
Files Watcher
Плагины для автоматической регенерации изменений мониторинга. Видеть:Ооо, ооо .jet brains.com/help/C Lion/ ...
Среда Ubuntu 16.04
OpenJDK 8
1. Загрузите исходный код OpenJDK8.
Здесь мы выбираем изAdoptOpenJDK
изGitHub
Репозиторий для загрузки исходного кода.
# 首先需要安装git工具(如果没有的话)
sudo apt-get install git
# 克隆项目代码,可能耗时较长
git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git
2. Установите набор инструментов и зависимости
# 首先需要下载安装 JDK7 作为 BootJDK
方法见上文
# 安装编译器及构建工具
sudo apt-get install gcc g++ gdb make
# 下载安装依赖包
sudo apt-get install libasound2-dev libfreetype6-dev libcups2-dev libfontconfig1-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
3. Конфигурация и сборка
# 首先进入 OpenJDK8 源码目录
# 配置
sh ./configure --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk1.7.0_80 --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu/
configure
Описание параметра:
параметр | значение |
---|---|
--with-debug-level | Уровень отладочной информации, необязательные значенияrelease ,fastdebug ,slowdebug
|
--disable-zip-debug-info | Отключите сжатие отладочной информации, установите значение true, чтобы облегчить отладку. |
--with-target-bits | Выберите 32-разрядную или 64-разрядную версию в зависимости от операционной системы. |
--with-boot-jdk |
BootJDK позиция |
--with-freetype-include --with-freetype-lib |
уточнитьfreetype Зависимость, если подсказка не может найтиfreetype , вам нужно настроить эти два параметра |
Для получения более подробного описания параметров и других параметров, пожалуйста, обратитесь к:OpenJDK 8 Build README - Configure
Мы можем использовать два инструмента для созданияCompilation Database
Используйте инструмент «Медведь».
# 下载Bear工具
sudo apt-get install bear
# 构建,并使用bear工具生成Compilation Database
bear make all
Использовать скомпилированный инструмент
# 需要保证有python环境
# 安装pip
sudo apt-get install python-pip
# pip安装 compiledb
pip install compiledb
# 构建,并使用compiledb工具生成Compilation Database
compiledb make all
Болееmake
изtarget
Пожалуйста, обратитесь кOpenJDK 8 Build README - Make
Если нет ошибки, вы должны быть в состоянии./build/linux-x86_64-normal-server-slowdebug/jdk
Найдите скомпилированную версию в каталогеJDK
, убедитесь, что это успешно
~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/
~: ./java -version
openjdk version "1.8.0-internal-debug"
......
При этом должна быть корневая директория проекта одновременноcompile_commands.json
файл и не пустой.
4. Введение и отладка CLion
См. шаги выше
OpenJDK 11
1. Загрузите исходный код OpenJDK11.
# 首先需要安装git工具(如果没有的话)
sudo apt-get install git
# 克隆项目代码,可能耗时较长
git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git
2. Установите набор инструментов и зависимости
# 需要下载安装 JDK10 作为 BootJDK
方法见上文
# 安装编译器及构建工具
sudo apt-get install gcc g++ gdb make autoconf
# 下载安装依赖包
sudo apt-get install libfreetype6-dev libcups2-dev
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
sudo apt-get install libasound2-dev libffi-dev
sudo apt-get install libfontconfig1-dev
3. Конфигурация и сборка
# 配置
sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk-10.0.2
В случае неудачи, как правило, некоторые зависимости отсутствуют, и вы можете установить соответствующие зависимости в соответствии с подсказками, которые дает скрипт.
configure
Описание параметра:
параметр | значение |
---|---|
--with-debug-level | Уровень отладочной информации, необязательные значенияrelease ,fastdebug ,slowdebug
|
--with-native-debug-symbols | указать, как построитьdebug symbol , необязательные значенияnone ,internal , external , zipped ,Установить какinternal можно лучше отладить |
--with-target-bits | Выберите 32-разрядную или 64-разрядную версию в зависимости от операционной системы. |
--with-boot-jdk |
bootjdk Место расположения |
--with-freetype-include --with-freetype-lib |
уточнитьfreetype Зависит от местоположения. Если подсказку не удается найтиfreetype , вам нужно настроить эти два параметра |
Для получения более подробного описания параметров и других параметров, пожалуйста, обратитесь к:OpenJDK 11 Build README - Configure
# 生成Compilation Database
make compile-commands
# 构建
make all
Болееmake
изtarget
Пожалуйста, обратитесь кOpenJDK 11 Build README - Make
После завершения вы должны быть в состоянии./build/linux-x86_64-normal-server-slowdebug/jdk
Найдите скомпилированный jdk в каталоге и проверьте, успешно ли он
~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/
~: ./java -version
openjdk version "11.0.8-internal" 2020-07-14
......
в то же время/build/linux-x86_64-normal-server-slowdebug/
каталог будет иметьcompile_commands.json
файл и не пустой.
4. Импортируйте CLion и отладьте
Общие шаги аналогичны описанным выше.
Следует учитывать, что при выборе/build/linux-x86_64-normal-server-slowdebug/
в каталогеcompile_commands.json
После импорта файла в проект необходимо изменить корневой каталог проекта на源码的根目录
(тут тожеopenjdk-11u
содержание). нажмите менюTools | Compilation Database | Change Project Root
,выберите源码根目录
(openjdk-11u
) и дождитесь завершения переиндексации.
MacOS 10.15 Окружающая среда
OpenJDK 8
MacOS 10.15.5
Строительство окружающей средыOpenJDK
иLinux
Дальнейшие действия аналогичны, но посколькуOpenJDK 8
Старые версии, некоторые из которых зависят отMacOS 10.15.5
Не удалось найти версию, что привело к различным проблемам в процессе настройки и сборки.В этой статье представлен относительно простой и удобный способ.
1. Загрузите исходный код OpenJDK8.
Мы выбираем изAdoptOpenJDK
изgithub
Склад Скачать исходный код
git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git
2. Установите набор инструментов и зависимости
- Сначала нужно скачать и установить
jdk7
в видеbootjdk
, см. способ в начале статьи. - Установить
HomeBrew
.Homebrew
ЭтоMacOS
Система управления пакетами в системе./bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- Установить
Xcode
. прямо вApp Store
Поиск установки, также доступный наdeveloper.apple.com/download/mo…Загрузите пакет автономной установки для установки. можно использоватьxcodebuild
Команда проверяет, прошла ли установка успешно, и правильный вывод номера версии указывает на правильную установку.
Если он установлен в автономном режиме, он может сообщитьxcodebuild -version
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
ошибка, потому чтоxcodebuild
Не удалось найти недавно установленныйXcode
, просто выполните следующую команду.sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
- Установить инструменты сборки
# 安装构建工具 brew install make
- Установите необходимые зависимости
# 安装freetype brew install freetype
3. Конфигурация и сборка
3.1 Изменить код
Если вы не изменяете код, выполнитеconfigure
, будут сообщены различные ошибки. В Интернете также есть много способов изменить исходный файл для каждой ошибки, чтобы устранить ошибку, и вот более удобный способ.
GitHub
Вверхstooke/jdk8u-xcode10Этот проект обеспечиваетopenjdk8
Код измененpatch
файл, после изменения кода вы можетеconfigure
.
git clone git@github.com:stooke/jdk8u-xcode10.git
Сам проект предоставляет скрипты для загрузки исходного кода, загрузки зависимостей, модификации кода, конфигурации, компиляции, тестирования и т. д., но здесь мы используем только модифицированный код. в исходном проектеREADME
может быть устаревшим, просмотрев его исходный код дляbuild8.sh
файл, я примерно могу понять логику выполнения в нем, поэтому буду его модифицироватьOpenJDK8
Часть кода извлечена и упрощена следующим образом:
создать новыйshell
сценарийpatch.sh
, содержание следующее:
#!/bin/bash
# JDK8 源码所在目录
JDK_DIR=`pwd`
# 下载的jdk8u-xcode10项目所在目录
PATCH_DIR="$(dirname $JDK_DIR)/jdk8u-xcode10"
PATCH_DIR="$PATCH_DIR/jdk8u-patch"
applypatch() {
cd "$JDK_DIR/$1"
echo "applying $1 $2"
patch -p1 <$2
}
patchjdkbuild() {
echo "patch jdk"
# JDK-8019470: Changes needed to compile JDK 8 on MacOS with clang compiler
applypatch . "$PATCH_DIR/jdk8u-8019470.patch"
# JDK-8152545: Use preprocessor instead of compiling a program to generate native nio constants
# (fixes genSocketOptionRegistry build error on 10.8)
applypatch jdk "$PATCH_DIR/jdk8u-jdk-8152545.patch"
# fix WARNINGS_ARE_ERRORS handling
applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8241285.patch"
# fix some help messages and Xcode version checks
applypatch . "$PATCH_DIR/jdk8u-buildfix1.patch"
# use correct C++ standard library
#applypatch . "$PATCH_DIR/jdk8u-libcxxfix.patch"
# misc clang-specific cleanup
applypatch . "$PATCH_DIR/jdk8u-buildfix2.patch"
# misc clang-specific cleanup; doesn't apply cleanly on top of 8019470
# (use -g1 for fastdebug builds)
#applypatch . "$PATCH_DIR/jdk8u-buildfix2a.patch"
# fix for clang crash if base has non-virtual destructor
applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8244878.patch"
applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-mac.patch"
# libosxapp.dylib fails to build on Mac OS 10.9 with clang
applypatch jdk "$PATCH_DIR/jdk8u-jdk-8043646.patch"
applypatch jdk "$PATCH_DIR/jdk8u-jdk-minversion.patch"
}
patchjdkbuild
Затем выполните этот скрипт:
bash patsh.sh
3.2 Конфигурация
sh ./configure MAKE=/usr/bin/make --with-toolchain-type=clang --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk1.7.0_80.jdk/Contents/Home/ --with-freetype-include=/usr/local/Cellar/freetype/2.10.2/include/freetype2 --with-freetype-lib=/usr/local/Cellar/freetype/2.10.2/lib/
MAKE=/usr/bin/make
является необязательным, если используется нижеBear
генерироватьCompilation Database
, этот параметр можно опустить.
configure
Некоторые параметры описываются следующим образом:
параметр | значение |
---|---|
--with-toolchain-type | Используемый тип цепочки инструментов, значенияgcc ,clang д., вы можете использовать--help Для просмотра всех необязательных значений |
--with-debug-level | Уровень отладочной информации, необязательные значенияrelease ,fastdebug ,slowdebug
|
--disable-zip-debug-info | Отключите сжатие отладочной информации, установите значение true для лучшей отладки. |
--with-target-bits | Выберите 32-разрядную или 64-разрядную версию в зависимости от операционной системы. |
--with-boot-jdk |
bootjdk Место расположения |
--with-freetype-include --with-freetype-lib |
уточнитьfreetype Зависит от места, в исполненииconfigure если не найденоfreetype , Вам нужно указать эти два параметра |
Для получения более подробного описания параметров и других параметров, пожалуйста, обратитесь к:OpenJDK 8 Build README - Configure
3.3 Сборка
Опять же, мы все еще можем использоватьbear
илиcompiledb
генерироватьCompilation Database
, но используяbear
Некоторые проблемы, возникающие в процессе, более сложны, рекомендуется использоватьcompiledb
.
использовать скомпилированныйb
# 1. 请先确保安装了Python及pip
方法请自行搜索
# 2. 安装compiledb工具
pip install compiledb
# 3. 构建,并使用compiledb工具生成Compilation Database
compiledb make all COMPILER_WARNINGS_FATAL=false
# 可以使用 LOG=debug 选项来输出更为详细的信息
# compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false
использоватьcompiledb
Возникают возможные проблемыcompile_commands.json
всех элементов в файлеdirectory
Предметы являются корневым каталогом проекта, вызывая файл заголовка, который не может быть найден, импортироватьCLion
Когда сообщение об ошибке, определение кода и прыжка недействительна. Причина в том,MacOS
платформа, сборка сборки может использоватьgmake
,иcompiledb
правильноgmake
Операция переключения путей не может быть захвачена, в результате чего все пути являются корневыми каталогами. Решение состоит в том, чтобы отобразить указанное использованиеmake
вместоgmake
, указанный метод находится в предыдущем разделе вConfigure
указано, когдаMAKE=/usr/bin/make
параметр.
использовать медведя
Выше мы используемcompiledb
инструменты для созданияCompilation Database
, вы также можете использоватьbear
инструмент для создания:
# 1. 首先需要关闭SIP,否则生成的 Compilation Database 可能会是空的
关闭SIP的方法请自行搜索
# 2. 安装bear
brew install bear
# 3. 构建,并使用bear工具生成Compilation Database
bear make all COMPILER_WARNINGS_FATAL=false
# 可以使用 LOG=debug 选项来输出更为详细的信息
# compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false
Если вы столкнулись с ошибкой при выполнении команды/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/stdio.h:107:15: fatal error: 'stdio.h' file not found
Вы можете попробовать выполнить следующую команду:
sudo mount -uw /
sudo cp -R /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include /usr
Болееmake
изtarget
Пожалуйста, обратитесь кOpenJDK 8 Build README - Make
Если нет ошибки, вы должны быть в состоянии./build/macosx-x86_64-normal-server-slowdebug/jdk
Найдите скомпилированную версию в каталогеJDK
, убедитесь, что это успешно
~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/
~: ./java -version
openjdk version "1.8.0-internal-debug"
......
При этом должна быть корневая директория проекта одновременноcompile_commands.json
файл и не пустой.
4. Импортируйте CLion и отладьте
нужно обратить внимание при созданииCustom Build Targets
, вновь созданныйBuild
изExternal Tool
серединаmake
Также добавьте в параметрCOMPILER_WARNINGS_FATAL=false
OpenJDK 11
1. Загрузите исходный код OpenJDK11.
git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git
2. Установите набор инструментов и зависимости
- Сначала нужно скачать и установить
jdk10
в видеbootjdk
, см. способ в начале статьи. - Установить
HomeBrew
.Homebrew
этоMacOS
Система управления пакетами в системе./bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- Установить
Xcode
. прямо вApp Store
поискXcode
установка, также доступна наdeveloper.apple.com/download/mo…Загрузите пакет автономной установки для установки. можно использоватьxcodebuild
Команда проверяет, прошла ли установка успешно, и правильный вывод номера версии указывает на правильную установку.
Если он установлен в автономном режиме, он может сообщитьxcodebuild -version
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
ошибка, потому чтоxcodebuild
Не удалось найти недавно установленныйXcode
, просто выполните следующую команду.sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
- Установить инструменты сборки
brew install autoconf brew install make
- Установите необходимые зависимости
# 安装freetype brew install freetype
3. Конфигурация и компиляция
# 配置
sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk-10.0.2+13/Contents/Home
configure
Описание параметра:
параметр | значение |
---|---|
--with-debug-level | Уровень отладочной информации, необязательные значенияrelease ,fastdebug ,slowdebug
|
--with-native-debug-symbols | указать, как построитьdebug symbol , необязательные значенияnone ,internal , external , zipped ,Установить какinternal можно лучше отладить |
--with-target-bits | Выберите 32-разрядную или 64-разрядную версию в зависимости от операционной системы. |
--with-boot-jdk |
bootjdk Место расположения |
--with-freetype-include --with-freetype-lib |
уточнитьfreetype Зависит от места, в исполненииconfigure если не найденоfreetype , вам нужно указать эти два параметра |
Для получения более подробного описания параметров и других параметров, пожалуйста, обратитесь к:OpenJDK 11 Build README - Configure
# 生成Compilation Database
make compile-commands
# 构建
make all
После завершения он должен быть в/build/linux-x86_64-normal-server-slowdebug/
каталог будет иметьcompile_commands.json
документ.
Болееmake
изtarget
Пожалуйста, обратитесь кOpenJDK 11 Build README - Make
После завершения вы должны быть в состоянии./build/macosx-x86_64-normal-server-slowdebug/jdk
Найдите скомпилированный jdk в каталоге и проверьте, успешно ли он
~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/
~: ./java -version
openjdk version "11.0.8-internal" 2020-07-14
......
в то же время./build/macosx-x86_64-normal-server-slowdebug/
каталог будет иметьcompile_commands.json
файл и не пустой.
4. Импортируйте CLion и отладьте
Общие шаги аналогичны описанным выше.
Следует учитывать, что при выборе/build/macosx-x86_64-normal-server-slowdebug/
в каталогеcompile_commands.json
После импорта файла в проект необходимо изменить корневой каталог проекта на源码的根目录
(вотopenjdk-11u
содержание). нажмите менюTools | Compilation Database | Change Project Root
, установите корневой каталог проекта в源码根目录
(openjdk-11u
) и дождитесь завершения переиндексации.
Ссылаться на
- OpenJDK
- OpenJDK 8 Build README
- OpenJDK 11 Build README
- rizsotto/Bear: Bear is a tool that generates a compilation database for clang tooling
- nickdiego/compiledb: Tool for generating Clang's JSON Compilation Database files for make-based build systems.
- Managing Makefile Projects
- Dealing with Makefile Projects in CLion: Status Update
- Tips & Tricks: Develop OpenJDK in CLion with Pleasure
- Debugging OpenJDK - DZone DevOps
- База компиляций — Блокнот сарказма
- More Software Downloads - Apple Developer
- stooke/jdk8u-xcode10: How to compile JDK 8u with Xcode 9, 10 or 11 on macOS.