CentosはJDK8ソースコードをコンパイルします

開発マシンの構成は次のとおりです。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

CentosはJDK8ソースコードをコンパイルします
CentOS7でFFMPEGソースコードをコンパイルする
CentOS7.5ソースコードはmysql5.7.29をコンパイルしてインストールします
CentOS7.4ソースコードはMySQL8.0をコンパイルしてインストールします
Ubuntu18.04ソースコードはffmpeg4.1をコンパイルしてインストールします
CentOSインストールjdk
Centos7はJDKを構成します
centos7ソースコードからopensshをインストールする方法
CentOS7のソースコードからMySQL8.xをインストールします
CentOS7.4でHadoop-2.7.6をコンパイルします
LinuxCentos7インストールjdk1.8
CentOS7はJDK8、tomcat8をインストールします
CentOS5からCentOS5.8YUMソース
Centos 7インストールJDK(Linuxインストールjdk)
Ubuntu18.04.1のソースコードからOpenJDK8をコンパイルしてインストールします
オープンソースEDAツールをコンパイルしてインストールします-CentOS8のSurelog
CentOS 7インストールJAVA環境(JDK 1.8)
CentOs7.3はNginx1.9.9をコンパイルしてインストールします
CentosはGitをコンパイルしてインストールします
Tencent CloudCentosはjdk8をインストールします
CentOS6の下にJavaJDK8をインストールします
Centos7はntp-4.2.8p11をコンパイルしてインストールします
CentOS6.9はpythonをコンパイルしてインストールします
CentOS6はpython3をコンパイルしてインストールします
5.1。CentOS @インストールJDK1.8グラフィックチュートリアル
Centos7インストールjdkおよびパッケージサービスサービス
centOS7にjdk1.8をインストールする方法
CentOS7にrpmでJDK8をインストールします
CentOSYumはMySQL5.6をコンパイルしてインストールします
Centos5.2でLAMPをコンパイルしてインストールします
CentOS7でのJDK1.8チュートリアルの最小インストール
CentOS8インストールjdk8 / java8チュートリアル(推奨)
Linux CentOS7にJDKをインストールするための詳細な手順
CentOS6.xはNginxをコンパイルしてインストールします
CentOS7はL(A | N)MP環境をコンパイルしてインストールします
Androidソースコードのコンパイル(ubuntu16.04 64ビット)
Centos7はopenJdkをアンインストールし、JDK1.8をインストールします
CentOS7インストールgogsgitコードサーバー
LinuxCentOS6はPytをコンパイルしてインストールします
Ubuntu環境でソースコードからxdebugをコンパイルしてインストールする方法