參考http://happyenjoylife.iteye.com/blog/858147的文章,成功編碼出openjdk7。我的系統是xubuntu12.10。記錄下錯誤解決方法。
1. 安裝mercurial
Mercurial是一個版本管理工具。
sudo apt-get install mercurial
安裝mercurial的擴充,添加fclone在支援
hg clone http://bitbucket.org/pmezard/hgforest-crew
将以下内容添加到$HOME/.hgrc檔案中,如果沒有則自己建立一個:
[extensions]
forest=/home/daren/hgforest-crew/forest.py
fetch=
2. 下載下傳jdk7源碼
hg fclone http://hg.openjdk.java.net/jdk7/jdk7
3. 安裝gcc、g++、make等
sudo apt-get install build-essential
4. 安裝XRender
sudo apt-get install libxrender-dev
sudo apt-get install xorg-dev
5. 安裝alsa
sudo apt-get install libasound2-dev
6. Cups
sudo apt-get install libcups2-dev
7. 安裝jdk6
直接去軟體中心搜尋下jdk6安裝
8. 安裝ant
設定ANT_HOME
9. 安裝findbugs
編譯
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-amd64/
export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-6-openjdk-amd64/
#設定JAXWS、JAXP、CORBA不編譯
make DEBUG_NAME=all_fastdebug BUILD_JAXWS=false BUILD_JAXP=false BUILD_CORBA=false
遇到的問題:
1、"*** This OS is not supported:" `uname -a`; exit 1;
解決:
jdk限制了編譯的liniux核心版本,修改檔案/home/thebye85/jdk7/hotspot/make/linux/Makefile
檢視目前的核心版本:$ uname -r
在這行最後加上目前的核心版本3.2%,如下:
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3.2%
2、/home/thebye85/jdk7/hotspot/src/share/vm/runtime/interfaceSupport.hpp:430:0: 錯誤: “__LEAF”重定義 [-Werror]
/usr/include/x86_64-linux-gnu/sys/cdefs.h:44:0: 附注: 這是先前定義的位置
cc1plus: all warnings being treated as errors
解決:
修改/usr/include/x86_64-linux-gnu/sys/cdefs.h,将__LEAF換個名字,如修改為__LEAF_A
3、collect2: ld 傳回 1
make[5]: *** [/home/thebye85/jdk7/build/linux-amd64/lib/amd64/libjsoundalsa.so] 錯誤 1
make[5]:正在離開目錄 `/home/thebye85/jdk7/jdk/make/javax/sound/jsoundalsa'
make[4]: *** [build] 錯誤 1
make[4]:正在離開目錄 `/home/thebye85/jdk7/jdk/make/javax/sound'
make[3]: *** [all] 錯誤 1
make[3]:正在離開目錄 `/home/thebye85/jdk7/jdk/make/javax'
make[2]: *** [all] 錯誤 1
make[2]:正在離開目錄 `/home/thebye85/jdk7/jdk/make'
make[1]: *** [jdk-build] 錯誤 2
make[1]:正在離開目錄 `/home/thebye85/jdk7'
make: *** [build_product_image] 錯誤 2
解決:
ln -s /home/thebye85/jdk7/build/linux-amd64/lib/amd64/libjsound.so /home/thebye85/jdk7/build/linux-amd64/lib/amd64/libjsoundalsa.so