Unbuntu_14.04编译openjdk7

今天有问题需要研究一下JVM,但系统挂了,只能重装。在ubuntu下再次编译JDK,大约2个半小时,将遇到的问题笔记整理一下。

1.下载Openjdk Source Code

我用的是http://download.java.net/openjdk/jdk7。(一般https://jdk7.java.net/source.html也可以,但遇到的问题不一样)

2.依赖安装

我的镜像源选择的是中科大镜像:mirrors.ustc.edu.cn(在super->software&update->点击download from后面的选择->china->mirrors.ustc.edu.cn)

apt-get update
apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev xllproto-print-dev binutils libmotif3 libmotif-dev ant

我不用openjdk做bootstrap JDK,编译的时候有Bug,建议使用Oracle JDK,我用的是1.7.0_80,去官方网站JDK->JDK Archive中JDK 7下载的。

如果上面第二条命令出现问题,可以换163,阿里云的镜像试试,实在不行,去pkgs.org下载失败的deb(Ubuntu14.04),使用dpkg -i software_name 安装。

3.环境变量

根据自己的路径设置有些地方可能需要修改:

export LANG=C
export ALT_BOOTDIR=/home/softwares/jdk1.7.0_80/

# Automatically download dependacies
export ALLOW_DOWNLOADS=true

# 并行编译线程数,与CPU核数一致
export HOTSPOT_JOBS=8
export ALT_PARALLEL_COMPILE_JOBS=8

#
export SKIP_COMPARE_IMGAGES=true

#
export USE_PRECOMPILED_HEADER=true

# Compiling contents
export BUILD_LANGTOOLS=true
export BUILD_HOTSOPT=true
export BUILD_JDK=true

# Compiling version

# Avoid javaws & applet build
BUILD_DEPLOY=false

# Avoid installation build
BUILD_INSTALL=false

# Result ouput
export ALT_OUTPUTDIR=/home/advance/JVM/jdkBuild/openjdk_7/build

# Necessity
unset JAVA_HOME
unset CLASSPATH

以上设置成功,在openjdk源码文件夹下:

make sanity 一次过。

4.编译make

在openjdk源码文件夹下:

#Ubuntu14.04居然check不同过,有点晕,只能加参数
make DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

遇到的其他错误及解决方案:

1-----------------------------------------------------------------------------------------
ERROR: echo "*** This OS is not supported:" ‘uname -a‘; exit 1;
make DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

2-----------------------------------------------------------------------------------------
/openjdk/hotspot/srcmps/constantPoolOop.cpp:272:39: error: converting ‘false‘ to pointer type ‘methodOop‘
修改/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp 第272行 return false改为return (methodOop)false; 或者 return NULL;

3-----------------------------------------------------------------------------------------
openjdk/hotspot/srcm/opto/loopnode.cpp:896:50: error: converting ‘false‘ to pointer type ‘Node*
SOLUTION: 修改openjdk/hotspot/src/share/vm/opto/loopnode.cpp: 第896行 return false改为return (Node*)false; 或者 return NULL;

4-----------------------------------------------------------------------------------------
Error occurred during initialization of VM Unable to load native library: /home/softwaresk1.8.0_101/jre/lib/amd64/libjava.so: symbol JVM_GetClassTypeAnnotations, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
SOLUTION: openjdk/hotspot/make/linux/Makefile 去掉所有的 && ./test_gamma

5-----------------------------------------------------------------------------------------
/home/mengxiansen/openjdk/openjdk/hotspot/src/share/vm/runtime/interfaceSupport.hpp:430:0: error: "__LEAF" redefined [-Werror]
SOLUTION:
 #define __LEAF(result_type, header)

/usr/include/x86_64-linux-gnu/sys/cdefs.h:42:0: note: this is the location of the previous definition
 #  define __LEAF , __leaf__

在interfaceSupport.hpp增加

#ifdef __LEAF
#undef __LEAF

#define __LEAF(result_type, header)                                  \
  TRACE_CALL(result_type, header)                                    \
  debug_only(NoHandleMark __hm;)                                     \
  /* begin of body */
#endif

6-----------------------------------------------------------------------------------------
gcc: error: unrecognized command line option ‘-mimpure-text‘
SOLUTION: gcc版本问题,这个命令在本机所用的4.7.2版的gcc中已经去除,既然不能降低gcc版本(本机ubuntu12.10内核用4.7.2版gcc编译),那就在openjdk/jdk/make/common/shared/Compiler-gcc.gmk 中去掉-mimpure-text命令

7-----------------------------------------------------------------------------------------
Error: time is more than 10 years from present: 1136059200000
SOLUTION: 将 openjdk/jdk/src/share/classes/java/util/CurrencyData.properties 中所有的时间改为10年以内

8-----------------------------------------------------------------------------------------
collect2: error: ld returned 1 exit status
SOLUTION: openjdk/jdk/make/javax/sound/jsoundalsa/Makefile 里面
刪除 LDFLAGS += -lasound
加入 OTHER_LDLIBS += -lasound

5.编译成功

-- Build times ----------
Target all_product_build
Start 2016-08-31 22:10:08
End   2016-08-31 22:13:49
00:00:02 corba
00:00:02 hotspot
00:00:01 jaxp
00:00:02 jaxws
00:03:33 jdk
00:00:01 langtools
00:03:41 TOTAL
-------------------------
make[1]: Leaving directory `/home/softwares/openjdk7‘

hotspot就是JVM,可以在IDE工具中进行调试。

以上记录在github中 https://github.com/dreamingodd/UnderstandingJVM ,其他问题可以去找来参考。

dreamingodd原创文章,如转载请注明出处。

时间: 2024-08-16 01:50:46

Unbuntu_14.04编译openjdk7的相关文章

Ubuntu 16.04编译Android 7.1.2

折腾了很久,终于搞定了这个环境.记录一下. 准备工作: 1. 首先在Ubuntu官网上下载Ubuntu16.04的官方镜像.官网下载地址(这个找了很久,这里可以直接下载ISO镜像):https://launchpad.net/ubuntu/+cdmirrors 2. 建议直接安装到自己硬盘上(推荐双系统),不要在虚拟机上搞,除非你有足够大的SSD.我之前在虚拟机上试过,电脑的性能完全发挥不出来,后来搞了双系统,发现一切都是那么舒服. 3. Android源码下载方法:https://lug.us

Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法

一.必备工作 1.安装依赖库 sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev li

ubuntu 14.04编译安装xen4.4总结

1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. suso apt-get install gcc make binutils zlib1g-dev python-dev sudo apt-get install libncurses5-dev libcurl4-openssl-dev libx11-dev sudo apt-get install uuid-dev

ubuntu12.04 编译android4.2源码 gcc: fatal error: no input files错误

============问题描述============ 最近在ubuntu12.04 编译android4.2源码时遇到一个编译错误,错误如下: host C++: libhost <= build/libs/host/pseudolocalize.cpp gcc: fatal error: no input files compilation terminated. make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_inte

ubuntu10.04编译安装LAMP

ubuntu10.04编译安装LAMP以及简单wordpress的使用 : http://linuxme.blog.51cto.com/1850814/971631 一.源码安装LAMP 网上有一堆关于介绍lamp的在这里我就不罗嗦了,直接上配置过程 1.apr包的安装 apr简介: The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that

在linux下编译openjdk7

最近刚开始看<深入理解JAVA虚拟机>这本书.第一章的实践是自己手动编译openjdk7,但书上的步骤都是基于windows的,于是在网上搜了一下linux下编译openjdk的资料: http://blog.csdn.net/kindazrael/article/details/7266314 http://guoh.org/lifelog/2011/05/compile-openjdk-by-yourself/ 这辆篇文章都说的比较详细.其实,最好的文档是openjdk源码包中的READM

Ubuntu14.04编译WebRTC For Android代码 2014-07-24

整整快一年没有写博客了,最近基于Google开源的WebRTC项目做了一款音视频聊天的即时通信项目,期间在下载WebRTC代码时就碰到了一些问题,在此以作记录,也希望能够帮助到正在下载编译WebRTC代码中碰到类似问题的童鞋们 1). 准备环境 1. Ubuntu14.04 LTS 系统 2. 准备一个稳定的速度还可以的VPN 或者 VPS ,这个很重要,大家都懂,大部分下载代码失败都是因为访问google服务失败导致的.(本人用的Digital Ocean, 之前试过几个VPN都以失败而告终,

Ubuntu12.04编译vlc-android详细流程

作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 摘要:本文主要介绍vlc-android在ubuntu下编译的过程. 最近研究了下 vlc-android 的编译,网上一搜资料确实不少,不过大部分都是千遍一律(也不否认有非常详细的).不能说这些都毫无价值,多少也能给编译vlc带来一些线索. 编译环境使用的是64位ubun

ubuntu 13.04编译pidgin-lwqq

首先安装一些编译所需的库,和工具 sudo apt-get install cmake libglib2.0-dev libpurple-dev libmozjs185-dev libcurl-ocaml-dev libsqlite3-dev 然后到作者的git下载代码 git clone [email protected]:xiehuc/pidgin-lwqq.git 下载完了开始编译安装 git submodule init git submodule update mkdir build;