java - 在 OS X El Capitan 上运行 IBM Notes Java 应用程序会抛出 UnsatisfiedLinkError

标签 java eclipse java-native-interface lotus-notes osx-elcapitan

我正在尝试运行一个 HelloWord Java 应用程序来访问 Mac 上的 Notes 客户端。我在旧版本上工作过。目前我有 Java 1.8.0_101-b13 和 OS/X 10.11.6。我尝试运行这段代码:

import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;

public class HelloWorld {

  public static void main(String[] args) throws NotesException {
    HelloWorld hw = new HelloWorld();
    hw.sayHello();
  }

  private void sayHello() throws NotesException {
    System.out.println("java.library.path: "+ System.getProperty("java.library.path"));
    System.out.println("PATH: "+ System.getenv("PATH"));
    NotesThread.sinitThread();
    Session s = NotesFactory.createSession();
    System.out.println(s.getEffectiveUserName());
    NotesThread.stermThread();
  }
} 

我已在 Eclipse 运行配置中设置了 LD_LIBRARY_PATH=/Applications/IBM Notes.app。当我运行该应用程序时,我得到:

java.library.path: /Applications/IBM Notes.app:/Users/joe/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. PATH: /Applications/IBM Notes.app:/usr/bin:/bin:/usr/sbin:/sbin Exception in thread "main" java.lang.UnsatisfiedLinkError: no lsxbe in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at lotus.domino.NotesThread.load(Unknown Source) at lotus.domino.NotesThread.checkLoaded(Unknown Source) at lotus.domino.NotesThread.sinitThread(Unknown Source) at com.notessensei.HelloWorld.sayHello(HelloWorld.java:31) at com.notessensei.HelloWorld.main(HelloWorld.java:20)

库路径看起来不错。我一定错过了一些明显的东西?

更新:当您查看输出时,Java 会选择 LD_LIBRARY_PATH 变量,因此似乎不需要 DYLD_LIBRARY_PATH (我添加了经测试无济于事)。 DYLD...似乎be problematic在 OS/X 上。

有一个不清楚的想法:在 OS/X 世界中,您通常指向应用程序 (IBM Notes.app),但内容实际上位于 appname.app/Contents/MacOS 。我想我两种方法都尝试过,结果是一样的。路径中的空间是否会抛出?

更新 2:根据要求 otool -L liblsxbe.dylib

的输出

liblsxbe.dylib: @executable_path/liblsxbe.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libxmlproc.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libnotes.dylib (compatibility version 0.0.0, current version 0.0.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

otool -L libxmlproc.dylib

libxmlproc.dylib: @executable_path/libxmlproc.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libnotes.dylib (compatibility version 0.0.0, current version 0.0.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

`otool -L libnotes.dylib'

libnotes.dylib: @executable_path/libnotes.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0) @executable_path/libjsmac.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libndgts.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libxmlproc.dylib (compatibility version 0.0.0, current version 0.0.0) @executable_path/libgsk8iccs.dylib (compatibility version 0.0.0, current version 0.0.0) /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55471.14.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 20.0.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.14.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1265.19.0) /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork (compatibility version 1.0.0, current version 673.2.1) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 48.0.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 59.0.0)

还有什么?

最佳答案

经过多次探索,发现有两个问题需要解决。第一个在 post by Mikkel Flint Heisterberg 中进行了描述。 。除了 DYLD_LIBRARY_PATH 之外,还需要设置另一个环境变量:NOTESBIN。两者都指向同一位置:

DYLD_LIBRARY_PATH=/Applications/IBM Notes.app/Contents/MacOS
NOTESBIN=/Applications/IBM Notes.app/Contents/MacOS

Eclipse 运行配置中不需要引号或反斜杠。

第二个比较棘手。出于方便,因为它之前就可以工作,我创建了一个名为“Notes9”的新条目“已安装的 JVM”。我在那里指出了 Oracle JVM8(是的,在 Mac Notes 上运行 Java8) Notes 的 jvm/lib/ext 中的 Notes.jar(以及其他)程序目录。

Mac 不再喜欢这样了。一旦我指向“裸”JVM8 并添加 Notes.jar 作为外部 Jar 依赖项,一切就开始按预期工作。

关于java - 在 OS X El Capitan 上运行 IBM Notes Java 应用程序会抛出 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39470027/

相关文章:

java - Apache POI Excel : Page setup Align with page margins

java - Eclipse IDE 快速修复如何显示建议?

java - 不满意的依赖异常 : Error creating bean with name 'procjectController' : Unsatisfied dependency expressed through field

java - 从 XML 文件获取架构位置 (noNamespaceSchemaLocation)

android - 如何在 fragment 中实现按钮 SetOnClickListener?

c++ - 使用 JNI 和 C++ 将 Unicode const char* 转换为 JString

android - Android 中的 Facemark 或 Kazemi

Scala SBT 和 JNI 库

java - 在哪里可以找到像 Guava 的 greaterThan 这样的基本谓词?

java - 在 BlackBerry 中访问互联网执行 POST 的不同方式