【问题标题】:Purpose of com.ibm.oti.vm.bootstrap.library.path on AIX j9vm JVMAIX j9vm JVM 上 com.ibm.oti.vm.bootstrap.library.path 的用途
【发布时间】:2013-10-09 12:28:45
【问题描述】:

背景

我有一个 C++ 程序,它在内部加载 JVM,然后使用 JNI 调用 JVM 中的代码。这可以在包括 AIX 在内的多个平台上运行。但是,当在 AIX 上启动 JVM 时,一切都很好,直到我调用一些需要访问作为 JRE 的一部分提供的本机代码的代码。然后我遇到了这个错误消息:

java.lang.UnsatisfiedLinkError: net (Not found in com.ibm.oti.vm.bootstrap.library.path)

问题是JVM找不到共享库libnet.so。如果我从在 JVM 中运行的 Java 代码中转储 com.ibm.oti.vm.bootstrap.library.path 系统属性的值,我会看到默认情况下(即不是我设置它)它具有以下值:

<jre-base-dir>/lib/ppc/default:<jre-base-dir>/lib/ppc

从错误消息中,我猜最好将其更改为包含libnet.so 所在的目录。但是这个共享库在&lt;jre-base-dir&gt;/lib/ppc,已经在com.ibm.oti.vm.bootstrap.library.path设置的路径下,所以报错信息好像不正确。

对此系统属性的不同值进行实验让我相信 AIX j9vm 仅使用它来加载内部 JVM 共享库(如 libjclse7b_26.so),而不是本机代码实现(如 libnet.so)。

我的修复

为了解决我的问题,我必须更改 LIBPATH 环境变量(在 AIX 中相当于 Linux 中的 LD_LIBRARY_PATH)。

$ LIBPATH=<jre-base-dir>/lib/ppc:<jre-base-dir>/lib/ppc/j9vm ./myprogram

问题

  1. 在使用 j9vm JVM 时,任何人都可以了解 AIX 上系统属性 com.ibm.oti.vm.bootstrap.library.path 的真正用途吗?

  2. 我的修复是解决问题的正确方法还是应该使用其他系统属性? (我尝试过java.library.path,但似乎没有帮助。)

【问题讨论】:

  • 您使用什么版本的 Java?我们有以下异常“线程“主”java.lang.UnsatisfiedLinkError 中的异常:fontmanager(在 com.ibm.oti.vm.bootstrap.library.path 中找不到)”。但是您的修复对我们不起作用。我们使用 IBM Java 1.6 SR14。
  • 这里是版本信息: $ ./java -version ↵ java version "1.7.0" ↵ Java(TM) SE Runtime Environment (build pap3270sr5-20130619_01(SR5)) ↵ IBM J9 VM ( build 2.6, JRE 1.7.0 AIX ppc-32 20130617_152572 (JIT enabled, AOT enabled) ↵ J9VM - R26_Java726_SR5_20130617_1436_B152572 ↵ JIT - r11.b04_20130528_38954ifx1 ↵ GC - R26_Java726_SR5_20130617_1436_B152572 ↵ J9CL - 20130617_152572) ↵ JCL - 20130616_01 based on Oracle 7u25-b12跨度>

标签: jvm aix jvm-arguments


【解决方案1】:

在我的情况下,它显示错误消息:

java.lang.UnsatisfiedLinkError:awt(在 com.ibm.oti.vm.bootstrap.library.path 中找不到)

我解决了我的问题 将 /usr/java6_64/jre/lib/ppc64/libawt.so 复制到 /usr/java6_64/jre/lib/ppc64/j9vm 并创建符号链接 libawt.a 到 libawt.so

我设置了 LD_LIBRARY_PATH LD_LIBRARY_PATH="/usr/java6_64/jre/lib/ppc64:/usr/java6_64/jre/lib/ppc64/j9vm";出口LD_ LIBRARY_PATH

【讨论】:

  • 我更喜欢不修改 JRE 分发的解决方案。在复制文件和创建符号链接之前,您是否尝试过我的解决方案?
  • 我尝试过,但它对我不起作用。对我有用的简单解决方案是仅在 /usr/java6_64/jre/lib/ppc64/j9vm/libawt.so 和 / 之间创建符号链接usr/java6_64/jre/lib/ppc64/libawt.so.
  • 好的,但是你的回答并没有真正回答我的问题,我要求深入了解 com.ibm.oti.vm.bootstrap.library.path 的目的
猜你喜欢
  • 2013-10-14
  • 2012-10-10
  • 2018-01-10
  • 2015-01-06
  • 2012-02-23
  • 2010-12-08
  • 2018-03-31
  • 1970-01-01
  • 2011-12-31
相关资源
最近更新 更多