编译JDK

编译hotspot的时候可能会出现的错误:
"*** This OS is not supported:" `uname -a`; exit 1;
这是由于内核版本太高了,hotspot默认支持的linux版本只到2.6,而ubuntu12的kernel是3.2,需要简单hack一下hotspot/make/linux/Makefile
两种方式解决:
方法一:
uname -r
#查看当前的内核版本:
3.2.0-20-generic

#在这行最后加上当前的内核版本3.2%,如下:
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3.2%

方法二:
vi hotspot/make/linux/Makefile
注释掉下面代码:
check_os_version:
#ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)
# $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1;
#endif

interfaceSupport宏变量冲突错误:
ubuntu12的glibc比较新,在linux的头文件cdefs.h里,有个__LEAF的宏,这个和hotspot/src/share/vm/runtime/interfaceSupport.hpp这个头文件中的宏定义有冲突,我们增加一个#undef __LEAF如下:
// LEAF routines do not lock, GC or throw exceptions
#ifdef __LEAF
#undef __LEAF
#define __LEAF(result_type, header)                                  \
  TRACE_CALL(result_type, header)                                    \
  debug_only(NoHandleMark __hm;)                                     \
  /* begin of body */
#endif

sound错误
cd jdk/make/javax/sound/jsoundalsa
vim Makefile
#找到CPPFLAGS ,在其结尾,添加 -lasound

make[5]: *** [/home/lichengwu/openjdk7/build/linux-amd64/lib/amd64/libjsoundalsa.so] Error 1
解决:
ln -s build/linux-amd64/lib/amd64/libjsound.so build/linux-amd64/lib/amd64/libjsoundalsa.so
如果ln不行 就用cp

freetype出错,报/usr/lib/libfreetype.so找不到
其实安装FreeType的时候系统默认放到了/user/local/lib/libfreetype.so下
解决
1.link或者copy到/usr/lib下
2.其实在为编译jdk前环境变量设置的时候就应该将ALT_FREETYPE_LIB_PATH设置成/usr/lib;/usr/local/lib。这样才算是最正确的解决方法

开始编译
sudo make SKIP_COMPARE_IMAGES=true BUILD_DEPLOY=false BUILD_INSTALL=false ALT_BOOTDIR=/usr/bin/jdk1.6.0_31 ALT_JDK_IMPORT_PATH=/usr/bin/jdk1.6.0_31 ALT_DEVTOOLS_PATH=/usr/bin BUILD_CORBA=false BUILD_JAXP=false BUILD_JAXWS=false

猜你喜欢

转载自xussen.iteye.com/blog/1677398