Ubuntu 16.04编译Yak源码,并使用Eclipse IDE for C/C++ Developers作为工具调试

 步骤和链接 https://blog.csdn.net/qq_34621987/article/details/87872704 类似,不同之处在于

 1. 编译Yak而不是OpenJDK,Yak源码链接 链接: https://pan.baidu.com/s/109i34OZwZZqsZv8aKxED6g 密码: cfuz

 2. make all时出现错误:

    recipe for target 'ad_stuff' failed
     make[5]: *** [ad_stuff] Error 2

    解决办法:由于make4.x的原因,make时会出现以上错误

    修改hotspot/make/linux/makefiles/adjust-mflags.sh文件,加上两个I
    

echo "$MFLAGS" \
    | sed '
        s/^-/ -/
-       s/ -\([^    ][^     ]*\)j/ -\1 -j/
+       s/ -\([^    I][^    I]*\)j/ -\1 -j/
        s/ -j[0-9][0-9]*/ -j/
        s/ -j\([^   ]\)/ -j -\1/
        s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/

3. 编译完进入bin目录后输入./java -version出现错误

 Error: dl failure on line 864 Error: failed /mnt/jdk8/build/linux-x86_64-normal-server-release/jdk/lib/amd64/server/libjvm.so, because /mnt/jdk8/build/linux-x86_64-normal-server-release/jdk/lib/amd64/server/libjvm.so: undefined symbol: _ZN23G1SATBCardTableModRefBS24write_ref_array_pre_workIP7oopDescEEvPT_i 

因为之前去掉了步骤2中adjust-mflags.sh的这一行,导致编译出现错误

s/ -\([^    ][^     ]*\)j/ -\1 -j/

因此按照步骤2中操作进行编译不会出现上述错误

4.

undefine symbols错误

提升一个模板函数定义至头文件,避免出现undefined symbols错误。

# 将 hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 中的template <class T> void write_ref_array_pre_work(T* dst, int count)方法,提升到对应的
头文件g1SATBCardTableModRefBS.hpp中。
# 模板函数定义需要出现在头文件中,以便编译器为其生成特化版本。若无此修改,运行编译后的java程序,将出现undefine symbols错误。

解决方法:https://www.cnblogs.com/sunilsun/p/6078171.html

zmx@ubuntu:~/nju/yak-openjdk8$ build/linux-x86_64-normal-server-release/jdk/bin/java -version
Error: dl failure on line 864
Error: failed /home/zmx/nju/yak-openjdk8/build/linux-x86_64-normal-server-release/jdk/lib/amd64/server/libjvm.so, because /home/zmx/nju/yak-openjdk8/build/linux-x86_64-normal-server-release/jdk/lib/amd64/server/libjvm.so: undefined symbol: _ZN23G1SATBCardTableModRefBS24write_ref_array_pre_workIP7oopDescEEvPT_i

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值