開発マシンの構成は次のとおりです。Linuxカーネルは2.6、Centosバージョンは6.9であり、ほとんど違いはありません。
1、 環境を整える
カーネルはC ++で記述されているため、GCCが必要であり、開発マシンのバージョンは8.1.0です。
メーカーは3.8.1で、4.2の新しいバージョンが最初にインストールされましたが、機能せず、3.8.1に変更するだけです。
JDK
JDKソースコード全体はJVMなどのコアコードのみがC / C ++で記述され、一部のクラスライブラリはJavaで記述され、最終的にクラスファイルにコンパイルする必要があるため、これに注意する必要があります。作業のこの部分は、コンパイルするために別のJDKが必要です。 8 JDKをコンパイルするには、1.7を使用する必要があり、1.8でコンパイルできます。使用するバージョンは1.8.0_231です。
他にもたくさんのライブラリがあり、yumを使用してインストールできます
yum -y install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel
yum -y install cups-devel
yum -y install alsa-lib-devel
2、 ソースコードをダウンロード
ダウンロード方法は2つあります。1つはgithubで、アドレスは次のとおりです。
https://github.com/openjdk/jdk
もう1つは、hgを使用してダウンロードすることです。hgを使用することをお勧めします。gitlabによってダウンロードされたコードを使用して一連のエラーをコンパイルし、hgに変更してダウンロードしてコンパイルし、合格しました。
hgダウンロードコマンド
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u jdk8u
3、 コンパイル
3.1、 最初にソースコードのルートディレクトリを入力します
cd jdk8u
3.2、 次に、ソースコードをダウンロードします。一部のコードは、デフォルトではダウンロードされません。
bash ./get_source.sh
3.3、 次に、コンパイルパラメータを設定します
bash ./configure --with-target-bits=64--with-debug-level=slowdebug --enable-debug-symbols --with-native-debug-symbols=internal --with-extra-ldflags=-liconv
いくつかのパラメータに注意してください
with-debug-level = slowdebug:デバッグ情報には、いくつかのオプションがあります。noneは、デバッグ情報がないことを意味します。fastdebugもあり、デバッグ情報は制限されています。デバッグ情報が最も多いslowdebugを使用することをお勧めします。
enable-debug-symbolsとwith-native-debug-symbols:どちらもデバッグ情報を有効にします。最初のコンパイルではenable-debug-symbolsのみが有効になります。JVM関連関数をデバッグするときはブレークポイント情報がないため、 -native-debug-symbolsで十分です。
with-extra-ldflags = -liconv:これは、コンパイル時にiconv関連の関数が見つからなかったと報告したためです。エラーは次のとおりです。
utf_md.c:(.text+0xb6): undefined reference to `libiconv_open'
utf_md.c:(.text+0xf8): undefined reference to `libiconv_open'
これはあなた自身の状況に応じて追加されます。
3.4 コンパイルを開始します
make CONF=linux-x86_64-normal-server-slowdebug
CONFパラメーターはコンパイル構成であり、1つはデバッグ情報なしの本番用、もう1つはデバッグ情報付きなど、さまざまなコンパイルパラメーターを構成できます。構成後、対応するフォルダーがビルドディレクトリに生成されます。
4、 一般的なコンパイルエラー
4.1、 invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
これは、コンパイラの警告レベルが高すぎるためです。解決策は次のとおりです。
変更:hotspot / make / linux / makefiles / gcc.make
# WARNINGS_ARE_ERRORS =-Werror
WARNINGS_ARE_ERRORS =-Wno-all
4.2、 error: left operand of shift expression ‘(-1 << 28)’ is negative [-fpermissive]
解決策:変更:hotspot / make / linux / makefiles / gcc.make
次のコンテンツを追加します。
CFLAGS +=-fpermissive
その他のエラーはBaiduの状況に基づいています。一般的に言えば、ライブラリなどが不足しているため、yumを使用してインストールするだけです。コンパイルパラメータもあり、関連するMakefileを変更するだけです。
5、 デバッグ
上記のコンパイル後、GDBでコンパイルできます。私の開発マシンのGDBバージョンは9.1です。
最初にHelloWorldJavaコードを記述し、Hello.javaとして保存します。
publicclassHello{publicstaticvoidmain(String[] args){
System.out.println("hello world");}}
次に、javacを使用してコンパイルします。javacのパスは次のとおりです。
. /build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac
Javaのデバッグを開始します。
gdb ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
gdbの実行後にデバッグパラメータを設定します。
set args Hello
次に、エントリのメイン関数にブレークポイントを設定します。
break jdk/src/share/bin/main.c:97
次に、jdkソースコードでローミングを開始できます。
主な機能は次のとおりです。
JNI_CreateJavaVM
JNI_GetDefaultJavaVMInitArgs
JNI_GetCreatedJavaVMs
JavaMain
create_vm
Recommended Posts