博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Ubuntu 12.04 上编译调试 OpenJDK8
阅读量:6957 次
发布时间:2019-06-27

本文共 4700 字,大约阅读时间需要 15 分钟。

前言

现在看的资料都是编译 openjdk7 的,openjdk8好像已经 openjdk7 编译方式大一样,按照前辈的文章使用

make sanity

会提示找不到 sanity 规则,然后编译过程其实基本就直接

./configuremake all

官方的 README 写的很清楚。

下面记录下过程

下载代码

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u jdk8ucd jdk8u bash ./get_source.sh

然后下载代码,进入代码目录:

cd jdk8u

代码目录中有一个 README-builds.html 描述了如何 build 整个系统,一些细节需要自己去寻找。

安装依赖

sudo aptitude build-dep openjdk-7 sudo aptitude install openjdk-7-jdk

配置

  • 环境变量
export LANG=C export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"
  • 配置编译选项
bash ./configure

这样生成相应默认配置,如果有需要,比如想编译出调试版本的,可以给 configure 加参数。

A new configuration has been successfully created in/home/minix/SourceCode/openjdk8/jdk8u/build/linux-x86-normal-server-releaseusing default settings.Configuration summary:* Debug level:    release* JDK variant:    normal* JVM variants:   server* OpenJDK target: OS: linux, CPU architecture: x86, address length: 32Tools summary:* Boot JDK:       java version "1.7.0_17" Java(TM) SE Runtime Environment (build 1.7.0_17-b02) Java HotSpot(TM) Server VM (build 23.7-b01, mixed mode)  (at /home/minix/Software/jdk1.7.0_17)* C Compiler:     gcc-4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (at /usr/bin/gcc-4.6)* C++ Compiler:   g++-4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (at /usr/bin/g++-4.6)Build performance summary:* Cores to use:   3* Memory limit:   3878 MB* ccache status:  not installed (consider installing)Build performance tip: ccache gives a tremendous speedup for C++ recompilations.You do not have ccache installed. Try installing it.You might be able to fix this by running 'sudo apt-get install ccache'.

可以看出提示缺少 ccache 包,按提示安装就可以了。从提示可以看出,编译级别是 release,另外还有几种编译级别,可以在调试时候提供更多的信息。例如:

bash ./configure --enable-debug

这样会生成 fastdebug 版本的配置信息:

A new configuration has been successfully created in/home/minix/openjdk8/jdk8u/build/linux-x86-normal-server-fastdebugusing configure arguments '--enable-debug'.Configuration summary:* Debug level:    fastdebug* JDK variant:    normal* JVM variants:   server* OpenJDK target: OS: linux, CPU architecture: x86, address length: 32Tools summary:* Boot JDK:       java version "1.7.0_17" Java(TM) SE Runtime Environment (build 1.7.0_17-b02) Java HotSpot(TM) Server VM (build 23.7-b01, mixed mode)  (at /home/minix/Software/jdk1.7.0_17)* C Compiler:     gcc-4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (at /usr/bin/gcc-4.6)* C++ Compiler:   g++-4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (at /usr/bin/g++-4.6)Build performance summary:* Cores to use:   3* Memory limit:   3878 MB* ccache status:  installed and in use

注意编译的级别已经变成 fastdebug 了。

--enable-debug 其实相当于 --with-debug-level=fastdebug, 可以通过这样的参数选项指定编译级别。一共可以指定三种级别: release, fastdebug, slowdebugslowdebug 含有最丰富的调试信息,没有这些信息,很多执行可能被优化掉,我们单步执行时,可能看不到一些变量的值。所以最好指定slowdebug 为编译级别

编译

编译直接

make

就可以了,如果提示

No CONF given, but more than one configuration found in /home/minix/openjdk8/jdk8u//build.Available configurations:* linux-x86-normal-server-fastdebug* linux-x86-normal-server-releasePlease retry building with CONF=
(or SPEC=
)

需要指定使用哪个编译配置:

make CONF=linux-x86-normal-server-fastdebug

最后编译成功后,会提示:

----- Build times -------Start 2014-08-22 10:56:52End   2014-08-22 11:16:3100:00:30 corba00:13:38 hotspot00:00:22 jaxp00:00:30 jaxws00:04:10 jdk00:00:29 langtools00:19:39 TOTAL

查看 build 目录,可以看到 linux-x86-normal-server-fastdebug

切换到 jdk/bin 目录:

cd linux-x86-normal-server-fastdebug/jdk/bin/

运行可执行文件 java

./java -version

会得到提示

openjdk version "1.8.0-internal-fastdebug"OpenJDK Runtime Environment (build 1.8.0-internal-fastdebug-minix_2014_08_22_10_56-b00)OpenJDK Server VM (build 25.40-b05-fastdebug, mixed mode)

调试

下面展示一个启动 GDB, 加断点,并运行一个 Java 程序的过程。

$ gdb javaGNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04Copyright (C) 2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "i686-linux-gnu".For bug reporting instructions, please see:
...Reading symbols from /home/minix/openjdk8/jdk8u/build/fastdebug/jdk/bin/java...done.(gdb) b mainBreakpoint 1 at 0x8048410: file /home/minix/openjdk8/jdk8u/jdk/src/share/bin/main.c, line 94.(gdb) r -classpath PossibleReorderingStarting program: /home/minix/openjdk8/jdk8u/build/fastdebug/jdk/bin/java -classpath PossibleReordering[Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".Breakpoint 1, main (argc=3, argv=0xbfffeca4) at /home/minix/openjdk8/jdk8u/jdk/src/share/bin/main.c:94

转载于:https://www.cnblogs.com/Iambda/p/3933447.html

你可能感兴趣的文章
微信video标签全屏无法退出bug
查看>>
[转]PostgreSQL 中文资料汇总
查看>>
那些被疯狂追求的女孩,后来怎么样了?
查看>>
(转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)...
查看>>
孟岩:通证(token)和通证经济的目的在于改善现有经济的效率性
查看>>
杜鹃演绎奢华春装大片
查看>>
mongoDb
查看>>
HTML框架1
查看>>
servlet:启动的时机
查看>>
笔记:2016-06-23
查看>>
5.22心得
查看>>
2017年11月27日高级软件测试技术例会记录
查看>>
最终增强
查看>>
C++ STL(1)
查看>>
socket编程
查看>>
浏览器渲染原理解析
查看>>
搭建个人网站需要的三个步骤
查看>>
matlab建立双坐标
查看>>
Linux操作命令(六)
查看>>
1、压滤机工作原理
查看>>