編繹OpenJDK
因為對於Java裏的vtable,itable,有個地方還沒搞明白,不得已去下個OpenJDK來研究下。
本來很不願意去編繹OpenJDK,因為很有可能做的隻是無用功,還有可能要去解決各種找不到鏈接庫的問題。
不過,沒想到雖然有些麻煩,但是出人意料的順利。
環境:ubuntu 13.10,已經安裝了oracle jdk7。
首先下載:
wget https://download.java.net/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip
再用unzip解壓。
unzip openjdk-7u40-fcs-src-b43-26_aug_2013.zip
在解壓後的文件夾裏,可以發現有一個“README-builds.html”的文件,這個就是編繹的說明了。
或者在網上也有:
https://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html#ubuntu
裏麵雖然關於ubuntu的最後是9.04版本,不過可以對照著畫葫蘆:
安裝依賴相關的包:
sudo aptitude build-dep openjdk-7
因為我已經安裝了oracle jdk,所以就沒有再安裝openjdk7了,事實證明,不用安裝openjdk7也可以。
據README裏的說明,先用下麵的命令來檢查下:
make sanity
如果提示下麵的錯誤:
WARNING: LANG has been set to zh_CN.UTF-8, this can cause build failures. Try setting LANG to 'C'.則先執行:
export LANG=C如果提示JAVA_HOME已經設置了:
ERROR: Your JAVA_HOME environment variable is set. This will most likely cause the build to fail. Please unset it and start your build again.則用unset取消:
unset JAVA_HOME還要設置下這個環境變量:
export ALT_BOOTDIR=/usr/lib/jvm/java-7-oracle最後,可以用make all來編繹了。不過編繹一次太慢了。還有下麵的這些編繹選項,在Makefile裏可以看到:
--- Common Targets --- \n\ all -- build the core JDK (default target) \n\ help -- Print out help information \n\ check -- Check make variable values for correctness \n\ sanity -- Perform detailed sanity checks on system and settings \n\ fastdebug_build -- build the core JDK in 'fastdebug' mode (-g -O) \n\ debug_build -- build the core JDK in 'debug' mode (-g) \n\ clean -- remove all built and imported files \n\ clobber -- same as clean \n\
可以考慮用make fastdebug_build來快速編繹。
最後生成的文件當然在build文件夾下了。
對於debug版,可以用下麵的命令來查看編繹出來的java示持哪些JVM的配置項:
./java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -XX:+PrintFlagsWithComments -version
如果是非debug,則可以使用下麵的命令來輸出可用的JVM配置項:
./java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
最後更新:2017-04-03 14:54:25