39 Star 111 Fork 22

方舟编译器孵化器 / maple_engine

 / 详情

编译openjdk时可能碰到的两个小patch

待办的
创建于  
2020-07-21 23:02

编译openjdk 8的时候可能会碰到两个问题,这里临时把patch放这里,免得大家找答案。

第一个问题,如果碰到一个奇怪的编译参数。

Creating vm.make ...
Creating adlc.make ...
Creating jvmti.make ...
Creating trace.make ...
Creating sa.make ...
/usr/bin/make: invalid option -- '8'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'a'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'c'
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
  -C DIRECTORY, --directory=DIRECTORY
                              Change to DIRECTORY before doing anything.
  -d                          Print lots of debugging information.
  --debug[=FLAGS]             Print various types of debugging information.
  -e, --environment-overrides

这是openjdk makefile的问题。

patch如下。

diff -r 87ee5ee27509 make/linux/makefiles/adjust-mflags.sh
--- a/make/linux/makefiles/adjust-mflags.sh Tue Mar 04 11:51:03 2014 -0800
+++ b/make/linux/makefiles/adjust-mflags.sh Wed Sep 30 16:51:55 2015 -0700
@@ -64,7 +64,6 @@
    echo "$MFLAGS" \
    | sed '
        s/^-/ -/
-       s/ -\([^    ][^     ]*\)j/ -\1 -j/
        s/ -j[0-9][0-9]*/ -j/
        s/ -j\([^   ]\)/ -j -\1/
        s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/

【就是把第二个s命令删掉。这个网页显示有问题,所以,说明一下】

第二个问题,

Running nasgen
Exception in thread "main" java.lang.VerifyError: class jdk.nashorn.internal.objects.ScriptFunctionImpl overrides final method setPrototype.(Ljava/lang/Object;)V
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at jdk.nashorn.internal.tools.nasgen.StringConstants.<clinit>(StringConstants.java:85)
        at jdk.nashorn.internal.tools.nasgen.MemberInfo.verify(MemberInfo.java:283)
        at jdk.nashorn.internal.tools.nasgen.ScriptClassInfo.verify(ScriptClassInfo.java:227)
        at jdk.nashorn.internal.tools.nasgen.Main.process(Main.java:108)
        at jdk.nashorn.internal.tools.nasgen.Main.processAll(Main.java:88)
        at jdk.nashorn.internal.tools.nasgen.Main.main(Main.java:62)
make[1]: *** [/home/wjeon/my_opejdk8/build/linux-x86_64-normal-server-release/nashorn/classes/_the.nasgen.run] Error 1

patch如下

diff -r 096dc407d310 make/BuildNashorn.gmk
--- a/make/BuildNashorn.gmk     Tue Mar 04 11:52:23 2014 -0800
+++ b/make/BuildNashorn.gmk     Mon Jul 20 22:33:16 2020 -0700
@@ -77,7 +77,7 @@
        $(RM) -rf $(@D)/jdk $(@D)/netscape
        $(CP) -R -p $(NASHORN_OUTPUTDIR)/nashorn_classes/* $(@D)/
        $(FIXPATH) $(JAVA) \
-           -cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
+           -Xbootclasspath/p:"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
            jdk.nashorn.internal.tools.nasgen.Main $(@D) jdk.nashorn.internal.objects $(@D)
        $(TOUCH) $@

评论 (24)

yehandong 创建了任务
展开全部操作日志

这个显示diff的效果怎么那么奇怪,没法看。。。。 :disappointed_relieved:

yehandong 修改了描述
Maple_YZhang 修改了描述

这个显示diff的效果怎么那么奇怪,没法看。。。。 :disappointed_relieved:

@yehandong Looks better now.

@yehandong Looks better now.

@Maple_YZhang 怎么改的?我怎么搞不定

@Maple_YZhang 怎么改的?我怎么搞不定

@yehandong 需要用code block 的格式。编辑时敲Ctrl-/ 会显示帮助信息,其中有code block 的说明。

Docker编译过程,https://ystyle.top/2020/07/21/dokcer-compile-maple-engine/
我没遇到第二个。
PS: Dockerfile可合并进来么?

@yehandong @Maple_YZhang 请问运行时有遇到 core dumped 是什么个情况?

Docker编译过程,https://ystyle.top/2020/07/21/dokcer-compile-maple-engine/
我没遇到第二个。
PS: Dockerfile可合并进来么?

@东方星痕
大佬有跑起来hello world吗?
其他示例能跑起来吗?看起来是支持反射的!
(看到内存流哈喇子……)

@东方星痕
大佬有跑起来hello world吗?
其他示例能跑起来吗?看起来是支持反射的!
(看到内存流哈喇子……)

@wconly 编译是没问题的,但运行hello world是出现了core dump(博客已更新执行结果图片)
ps: Fibonacci的是一样的问题(都是x86平台,ARM平台没条件 。。。)

@wconly 编译是没问题的,但运行hello world是出现了core dump(博客已更新执行结果图片)
ps: Fibonacci的是一样的问题(都是x86平台,ARM平台没条件 。。。)

@东方星痕
看起来是libjvm.so没有找到有关的库,因此无法引用所需函数?
盲猜一下,看能不能设个环境变量找一下,或者直接放在已存在的系统环境变量目录里?

@yehandong @Maple_YZhang 请问运行时有遇到 core dumped 是什么个情况?

@MihuSeen 很多情况可能导致core dumped:

  1. 构建OpenJDK-8 的 Java 核心库时没有在文件Object.java中添加额外的两个fields
public class Object {
    long reserved_1; int reserved_2; // Add two extra fields here
    private static native void registerNatives();
  1. 使用了不兼容的libjvm.so

解决办法是用openjdk-8-jre-headless里的libjvm.so:

sudo apt install -y openjdk-8-jre-headless
cd maple_engine/maple_runtime/lib/x86_64/
rm -f libverify.so libjvm.so libjava.so

@东方星痕
看起来是libjvm.so没有找到有关的库,因此无法引用所需函数?
盲猜一下,看能不能设个环境变量找一下,或者直接放在已存在的系统环境变量目录里?

@wconly @东方星痕
用openjdk-8-jre-headless里的libjvm.so:

sudo apt install -y openjdk-8-jre-headless
cd maple_engine/maple_runtime/lib/x86_64/
rm -f libverify.so libjvm.so libjava.so

@wconly @东方星痕
试一试用openjdk-8-jre-headless里的libjvm.so?

sudo apt install -y openjdk-8-jre-headless
cd maple_engine/maple_runtime/lib/x86_64/
rm -f libverify.so libjvm.so libjava.so

@Maple_YZhang
我使用的是 @东方星痕 提供的docker image
按照您说的办法成功惹!
https://images.gitee.com/uploads/images/2020/0722/021459_eca2399f_5282271.png
我之前dump了一下文件夹里的.so,缺失的是write_ref_array_pre_work,看起来像是g1乐色回收器里的函数,不知怎么搞的?

@Maple_YZhang
按照您说的办法成功惹……!
https://images.gitee.com/uploads/images/2020/0722/021459_eca2399f_5282271.png
我之前dump了一下文件夹里的.so,缺失的是write_ref_array_pre_work,看起来像是g1乐色回收器里的函数,不知怎么搞的?

@wconly 很高兴知道您能成功运行了。刚把回答里面的问号去掉了。

@wconly 很高兴知道您能成功运行了。刚把回答里面的问号去掉了。

@Maple_YZhang
吸吸,也恭喜贵司公开的maple环境可以跑起来惹!
不过看来脚本还要对应的调整下噜……
厚厚厚,胜利归于 @东方星痕, docker image是他提供的惹……
只是我不知道为什么那些.so缺少那个函数?
正在试Fibonacci,看样子现在释出的环境是支持反射的?!

简单试了几个Fibonacci数据也没问题,当然数据过大时爆掉也属正常,会弹“Segmentation fault”……
又试了官方给出的RCCycleTest与一个简单的反射例子,但是看起来目前似乎还没有支持……
等待继续开放吧!
加油惹~

@Maple_YZhang
我使用的是 @东方星痕 提供的docker image
按照您说的办法成功惹!
https://images.gitee.com/uploads/images/2020/0722/021459_eca2399f_5282271.png
我之前dump了一下文件夹里的.so,缺失的是write_ref_array_pre_work,看起来像是g1乐色回收器里的函数,不知怎么搞的?

@wconly 这个符号write_ref_array_pre_work 问题是由OpenJDK-8的构建引起的。您可以尝试用刚构建好的OpenJDK-8的工具链(javac和java,在目录build/linux-x86_64-normal-server-release/images/j2sdk-image/bin/中),编译和运行一个小程序,会遇到同样的错误信息。

@wconly 这个符号write_ref_array_pre_work 问题是由OpenJDK-8的构建引起的。您可以尝试用刚构建好的OpenJDK-8的工具链(javac和java,在目录build/linux-x86_64-normal-server-release/images/j2sdk-image/bin/中),编译和运行一个小程序,会遇到同样的错误信息。

@Maple_YZhang
昨天跑了官网上给出的RCCycleTest,没有成功
但是刚刚又跑了一遍,看上去官网给出的示例都成功惹……(气cry,努力一定会成功,不努力就去屎惹~)

RCCycleTest
https://images.gitee.com/uploads/images/2020/0722/100927_d736d8ba_5282271.png

ThreadTest
https://images.gitee.com/uploads/images/2020/0722/101316_075c209e_5282271.png

Arith
https://images.gitee.com/uploads/images/2020/0722/101845_73e4dc09_5282271.png

给你们很多很好的评价惹~

@wconly 这个符号write_ref_array_pre_work 问题是由OpenJDK-8的构建引起的。您可以尝试用刚构建好的OpenJDK-8的工具链(javac和java,在目录build/linux-x86_64-normal-server-release/images/j2sdk-image/bin/中),编译和运行一个小程序,会遇到同样的错误信息。

@Maple_YZhang
但是简单的反射实验还是失败
先Class.forName("java.lang.String")
后getDeclaredMethods()
结果
https://images.gitee.com/uploads/images/2020/0722/104058_72b88434_5282271.png
用javac、java是可以正常运行打印的……

@Maple_YZhang
另外,最后要用openjdk-8-jre-headless来替换原libjvm.so需要加入文档吧?

@wconly 这个其实是我构建镜像时复制进去的,只要把dockerfile那几行删除就好了

@wconly 这个其实是我构建镜像时复制进去的,只要把dockerfile那几行删除就好了

@东方星痕
好的,了解惹~
多谢您提供的docker image!

@Maple_YZhang
另外,最后要用openjdk-8-jre-headless来替换原libjvm.so需要加入文档吧?

@wconly 在最初的文档中已经提到这一点,是英文的:Shared libraries(Can use these three shared libraries from the openjdk-8-jdk-headless package also)。不过文档还是更新了。谢谢!

@wconly 在最初的文档中已经提到这一点,是英文的:Shared libraries(Can use these three shared libraries from the openjdk-8-jdk-headless package also)。不过文档还是更新了。谢谢!

@Maple_YZhang
好的~
不过反射部分看起来还是有问题惹……

@Maple_YZhang
好的~
不过反射部分看起来还是有问题惹……

@wconly 好的,看到上面提到的问题了,会尽快解决。

@wconly 好的,看到上面提到的问题了,会尽快解决。

@Maple_YZhang
加油惹~

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(5)
5274908 ye handong 1578983635 7610270 smhlensung 1590551152 58234 ystyle 1578915778 5282271 wconly 1596507560
C++
1
https://gitee.com/openarkcompiler-incubator/maple_engine.git
git@gitee.com:openarkcompiler-incubator/maple_engine.git
openarkcompiler-incubator
maple_engine
maple_engine

搜索帮助