Ubuntu 12.04 下编译OpenJDK 7问题
刚开始选择在Windows的Cygwin下编译,结果问题连连,两天都搞不定。只有换到Ubuntu下面。记录一下
不过12.04的Ubuntu使用的是3.2的内核,而openJDK的hotspot的Makefile里面支持的内核没这么高,所以会遇到一些问题。所以个人建议还是用9或者10的Ubuntu版本。
编译的过程不复杂:下载源代码。 按照README-builds.html里面ubuntu或者linux的步骤做就可以了。README-builds.html虽然很多,但是一定要看 了后,才可能成功编译。
现在只列一下遇到的问题:
1.刚开始会有很多的库没有,make sanity都过不了,按提示下载即可
2.缺少drops文件(need access to drops.)。
应该设置ALT_DROPS_DIR指向drops目录。所谓的drops目录就是包含了JAXP和JAX-WS源代码的目录。默认不包含在openJDK源代码中。可以手动去http://download.java.net/openjdk/jdk7/下载。
另外,这个问题也可以不设置drops目录,而在编译是,使用:
make ALLOW_DOWNLOADS=true
这样编译的时候,ant会自动去下载的
3. OS Version is not supported
因为3.2的内核不支持。这个问题可以引用网上的解答,修改hotspot/make/linux/Makefile,把3.2的内核加入到支持列表中即可:
http://mail.openjdk.java.net/pipermail/porters-dev/2011-October/000367.html
4.__LEAF redefined。由于g++的高版本中,增加了对__LEAF的定义,而openJDK源代码中也有__LEAF定义,于是重复。对于这个bug,有如下引用可以修改:
http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/a6eef545f1a2
要修改6个文件(我不会用hg,所以直接就把这6个文件用正确的替换掉了)
5.undefined reference to `snd_pcm_format_mask_malloc'(很多undefined reference to `snd_****`)
这貌似也是一个bug,链接的顺序不对,可以引用的方法:
http://sunnycomputerlab.com/roller/sunny/entry/openjdk_compile_problem_on_ubuntu
把lasound加入到extra_libs里面去即可
6.另外,如果找不到shape.h,可以安装libxtst-dev,libxrender-dev, 还可能要更新freetype的版本,下载他的dev版本等等。
挺多麻烦事,不过还好,几个小时过后还是编译出来了,兴奋啊。