CentOS7下編譯openjdk

CentOS7下編譯openjdk

編譯環境:

操作系統: CentOS7 64位
BootStrap JDK: 1.7.0_76

1. 下載openjdk源碼

下載openjdk1.7源碼 openjdk-7u40-fcs-src-b43-26_aug_2013.zip

2. 安裝編譯環境

  1. 安裝alsa包
    yum install alsa-lib-devel
  2. 安裝cups-devel
    yum install cups-devel
  3. 安裝X相關的庫
    yum install libX*
  4. 安裝g++
    yum install gcc gcc-c++
  5. 安裝freetype
    rpm -ivh freetype-2.4.11-9.el7.x86_64.rpm 下載地址
  6. 安裝ant
    tar -zvxf apache-ant-1.9.6-bin.tar.gz 下載地址
  7. 設置環境變量
    unset CLASSPATH
    unset JAVA_HOME
    // 語言選項,必須設置
    export LANG=C
    // Bootstrap JDK的安裝路徑,必須設置
    export ALT_BOOTDIR=/usr/java/jdk1.7.0_76
    // Ant的安裝路徑
    export ANT_HOME=/opt/apache-ant-1.9.6
    // 允許自動下載依賴
    export ALLOW_DOWNLOADS=true
    // 預編譯
    export USE_PRECOMPILED_HEADER=true
    // 64位jdk
    export ARCH_DATA_MODEL=64
    // 並行編譯的線程數,設置爲和CPU內核數量一致即可
    export HOTSPOT_BUILD_JOB=4
    export ALT_PARALLEL_COMPILE_JOBS=4
    // 編譯內容
    export SKIP_DEBUG_BUILD=false
    export SKIP_FASTDEBUG_BUILD=true
    export DEBUG_NAME=debug
    // 輸出路徑
    export ALT_OUTPUTDIR=/root/openjdk/build
  8. 編譯檢查
    make sanity
    若輸出結果爲:Sanity check passed,表示設置正確
  9. 執行編譯
    make
  10. 配置debug版jdk
    /root/openjdk/build-debug/j2sdk-image下內容爲debug版jdk,將其複製到%JAVA_HOME%下,替換Oracle JDK。
  11. 查看jdk版本信息
    [root@localhost ~]# java -version
    openjdk version “1.7.0-internal-debug”
    OpenJDK Runtime Environment (build 1.7.0-internal-debug-root_2015_12_02_11_03-b00)
    OpenJDK 64-Bit Server VM (build 24.0-b56-jvmg, mixed mode)

3. 編譯時出現的問題

1. /usr/bin/ld: cannot find -lstdc++

Linking vm...
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
/usr/bin/chcon: cannot access 'libjvm.so': No such file or directory
ERROR: Cannot chcon libjvm.so
/usr/bin/objcopy --only-keep-debug libjvm.so libjvm.debuginfo
/usr/bin/objcopy: 'libjvm.so': No such file
make[4]: *** [libjvm.so] Error 1
make[4]: Leaving directory `/usr/src/openjdk/hotspot/build/hotspot_debug/linux_amd64_compiler2/debug'
make[3]: *** [the_vm] Error 2
make[3]: Leaving directory `/usr/src/openjdk/hotspot/build/hotspot_debug/linux_amd64_compiler2/debug'
make[2]: *** [debug] Error 2
make[2]: Leaving directory `/usr/src/openjdk/hotspot/build/hotspot_debug'
make[1]: *** [generic_build2] Error 2
make[1]: Leaving directory `/usr/src/openjdk/hotspot/make'
make: *** [debug] Error 2

解決方法:
yum search libc++
yum install libstdc++-static
參考資料

2. ./gamma: relocation error: /usr/java/jdk1.7.0_76/jre/lib/amd64/libjava.so

Using java runtime at: /usr/java/jdk1.7.0_76/jre
./gamma: relocation error: /usr/java/jdk1.7.0_76/jre/lib/amd64/libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
make[5]: *** [jvmg] Error 127
make[5]: Leaving directory `/root/openjdk/build-debug/hotspot/outputdir'
make[4]: *** [generic_build2] Error 2
make[4]: Leaving directory `/root/Downloads/openjdk/hotspot/make'
make[3]: *** [jvmg] Error 2
make[3]: Leaving directory `/root/Downloads/openjdk/hotspot/make'
make[2]: *** [hotspot-build] Error 2
make[2]: Leaving directory `/root/Downloads/openjdk'
make[1]: *** [generic_debug_build] Error 2
make[1]: Leaving directory `/root/Downloads/openjdk'
make: *** [build_debug_image] Error 2

解決方法:刪除hotspot/make/linux/MakeFile中所有的test_gamma參考資料
3. Error: time is more than 10 years from present: 1120165200000

Error: time is more than 10 years from present: 1120165200000
java.lang.RuntimeException: time is more than 10 years from present: 1120165200000
    at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285)
    at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225)
    at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154)
make[5]: *** [/root/openjdk/build/../build-debug/lib/currency.data] Error 1
make[5]: Leaving directory `/root/Downloads/openjdk/jdk/make/java/java'
make[4]: *** [all] Error 1
make[4]: Leaving directory `/root/Downloads/openjdk/jdk/make/java'
make[3]: *** [all] Error 1
make[3]: Leaving directory `/root/Downloads/openjdk/jdk/make'
make[2]: *** [jdk-build] Error 2
make[2]: Leaving directory `/root/Downloads/openjdk'
make[1]: *** [generic_debug_build] Error 2
make[1]: Leaving directory `/root/Downloads/openjdk'
make: *** [build_debug_image] Error 2

解決方法:修改CurrentDate.properties文件,將所有的時間改爲10年以內。參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章