[讨论] 编译OpenJDK6去用作调试Oracle/Sun jdk1.6.0_45的源码 可以吗?

AnonymMan 2014-11-20
呼,找到那个错误的解决办法了,因为我的系统是amd64位的,所以需要改下\jdk6_src\j2se\make\sun\jdbc\Makefile 里$(TEMPDIR)/libodbcinst.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<
$(TEMPDIR)/libodbc.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<

加上-fPIC,在gcc编译的时候能够共享库。 非常感谢R大耐心的解答
AnonymMan 2014-11-20
R大,我将编译过的j2sdk-debug-image/jre/lib.rt.jar去替换我现在用的6u45的rt.jar,现在运行程序都不可以了,error occurred during initialization of vm。这个办法行不通啊?

并且我去编译oracle6u23的源码,加上-XDignore.symbol.file=true参数依然报错,
ByteBufferAs-X-Buffer.java类似这样的源码中有许多"#warn This file is preprocessed before being compiled"、"#if[rw] #end[rw]" 这样的符号,无法编译,请问这是什么情况?
RednaxelaFX 2014-11-21
AnonymMan 写道
R大,我将编译过的j2sdk-debug-image/jre/lib.rt.jar去替换我现在用的6u45的rt.jar,现在运行程序都不可以了,error occurred during initialization of vm。这个办法行不通啊?

呃?如果我能现场调试的话这个应该很好解决。不过您不想麻烦的话可以干脆用编译出来的JDK6u23的j2sdk-image作为主体+j2sdk-debug-image的rt.jar这样组合起来作为您的开发JDK。

AnonymMan 写道
并且我去编译oracle6u23的源码,加上-XDignore.symbol.file=true参数依然报错,
ByteBufferAs-X-Buffer.java类似这样的源码中有许多"#warn This file is preprocessed before being compiled"、"#if[rw] #end[rw]" 这样的符号,无法编译,请问这是什么情况?

嗯这是JDK源码里用的模板⋯这些名字里有-X-的都是模板,在正常编译整个JDK的时候会有特殊处理来把这些模板展开为Java文件。您可以忽略这些文件。
AnonymMan 2014-11-21
RednaxelaFX 写道
AnonymMan 写道
R大,我将编译过的j2sdk-debug-image/jre/lib.rt.jar去替换我现在用的6u45的rt.jar,现在运行程序都不可以了,error occurred during initialization of vm。这个办法行不通啊?

呃?如果我能现场调试的话这个应该很好解决。不过您不想麻烦的话可以干脆用编译出来的JDK6u23的j2sdk-image作为主体+j2sdk-debug-image的rt.jar这样组合起来作为您的开发JDK。

AnonymMan 写道
并且我去编译oracle6u23的源码,加上-XDignore.symbol.file=true参数依然报错,
ByteBufferAs-X-Buffer.java类似这样的源码中有许多"#warn This file is preprocessed before being compiled"、"#if[rw] #end[rw]" 这样的符号,无法编译,请问这是什么情况?

嗯这是JDK源码里用的模板⋯这些名字里有-X-的都是模板,在正常编译整个JDK的时候会有特殊处理来把这些模板展开为Java文件。您可以忽略这些文件。




R大,我在windows下把编译出来的JDK6u23添加到Eclipse中,运行程序时,JDK6u23的bin目录下的java命令不能执行的,"Exception occurred executing command line.
Cannot run program "D:\j2sdk-image\bin\java" (in directory "E:\Eclipse\test"): CreateProcess error=193, %1 ²»ÊÇÓÐЧµÄ Win32 ӦÓó" 第一个问题用这种方法好像不行啊?
RednaxelaFX 2014-11-21
AnonymMan 写道
R大,我在windows下把编译出来的JDK6u23添加到Eclipse中,运行程序时,JDK6u23的bin目录下的java命令不能执行的,"Exception occurred executing command line.
Cannot run program "D:\j2sdk-image\bin\java" (in directory "E:\Eclipse\test"): CreateProcess error=193, %1 ²»ÊÇÓÐЧµÄ Win32 ӦÓó" 第一个问题用这种方法好像不行啊?

想问问您是在什么平台上编译、在什么平台上运行的?
看起来您是在某个Linux上编译然后拷贝到Windows上去运行了?这样显然不能行啊!您得到的java是个ELF文件,不是Windows能执行的PE文件。

莫非之前您也是在Linux上编译了JDK6u23之后把它的rt.jar拷贝到Windows的JDK6里了?
AnonymMan 2014-11-21
RednaxelaFX 写道
AnonymMan 写道
R大,我在windows下把编译出来的JDK6u23添加到Eclipse中,运行程序时,JDK6u23的bin目录下的java命令不能执行的,"Exception occurred executing command line.
Cannot run program "D:\j2sdk-image\bin\java" (in directory "E:\Eclipse\test"): CreateProcess error=193, %1 ²»ÊÇÓÐЧµÄ Win32 ӦÓó" 第一个问题用这种方法好像不行啊?

想问问您是在什么平台上编译、在什么平台上运行的?
看起来您是在某个Linux上编译然后拷贝到Windows上去运行了?这样显然不能行啊!您得到的java是个ELF文件,不是Windows能执行的PE文件。

莫非之前您也是在Linux上编译了JDK6u23之后把它的rt.jar拷贝到Windows的JDK6里了?



是的额,我确实是在Linux下编译的6u23,然后在windows下调试的,将Linux编译好的rt.jar去替换win的rt.jar了.....,那如果想在windows上调试的话,只能在windows上去编译吗?
RednaxelaFX 2014-11-21
AnonymMan 写道
是的额,我确实是在Linux下编译的6u23,然后在windows下调试的,将Linux编译好的rt.jar去替换win的rt.jar了.....,那如果想在windows上调试的话,只能在windows上去编译吗?

嗯,最好在Windows上编译(但当年的JDK6在Windows上要编译通过太麻烦了,各种依赖找不到)。

Linux上编译的JDK6里的rt.jar里虽然都是Java的Class文件,但里面有些类是有平台相关的逻辑的,例如会有些类在不同平台上有不同的子类来实现具体逻辑,所以rt.jar不能在不同平台间直接互换使用…
AnonymMan 2014-11-21
RednaxelaFX 写道
AnonymMan 写道
是的额,我确实是在Linux下编译的6u23,然后在windows下调试的,将Linux编译好的rt.jar去替换win的rt.jar了.....,那如果想在windows上调试的话,只能在windows上去编译吗?

嗯,最好在Windows上编译(但当年的JDK6在Windows上要编译通过太麻烦了,各种依赖找不到)。

Linux上编译的JDK6里的rt.jar里虽然都是Java的Class文件,但里面有些类是有平台相关的逻辑的,例如会有些类在不同平台上有不同的子类来实现具体逻辑,所以rt.jar不能在不同平台间直接互换使用…



那....我想在windows上调试,只能硬下头皮在windows下再编译下6u23了额....对吧,R大.
RednaxelaFX 2014-11-21
AnonymMan 写道
那....我想在windows上调试,只能硬下头皮在windows下再编译下6u23了额....对吧,R大.

还是可以用Ant方式来啊。先jar tf来把您在Windows上的JDK6的rt.jar的文件列表导出,然后写个脚本让Ant把JDK源码包里的Java部分对应的源码找出来编译掉,替换到rt.jar里就好了。
AnonymMan 2014-11-21
RednaxelaFX 写道
AnonymMan 写道
那....我想在windows上调试,只能硬下头皮在windows下再编译下6u23了额....对吧,R大.

还是可以用Ant方式来啊。先jar tf来把您在Windows上的JDK6的rt.jar的文件列表导出,然后写个脚本让Ant把JDK源码包里的Java部分对应的源码找出来编译掉,替换到rt.jar里就好了。


好滴~  非常感谢~!! 我去试试。


R大,我尝试按您的方法用jar tf把我现在开发用的rt.jar的文件列表导出,但是去编译列表中的一些java文件会报错,这个怎么解?比如java/nio/ByteBufferAs-X-Buffer.java、
这是错误log http://dl.iteye.com/topics/download/7747778e-3152-3ca2-9ee0-8d9aff3a2119
Global site tag (gtag.js) - Google Analytics