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

时间:2016-09-13 12:23:44

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

我试图运行一个访问Mac上的Notes客户端的HelloWord Java应用程序。我有那个旧版本的工作。目前我有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 /扩展:/ usr / lib中/ JAVA :.       路径:/ Applications / IBM Notes.app:/usr/bin:/bin:/usr/sbin:/sbin       线程" main"中的例外情况java.lang.UnsatisfiedLinkError:java.library.path中没有lsxbe           在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)           在java.lang.Runtime.loadLibrary0(Runtime.java:870)           在java.lang.System.loadLibrary(System.java:1122)           在lotus.domino.NotesThread.load(未知来源)           在lotus.domino.NotesThread.checkLoaded(未知来源)           在lotus.domino.NotesThread.sinitThread(未知来源)           在com.notessensei.HelloWorld.sayHello(HelloWorld.java:31)           在com.notessensei.HelloWorld.main(HelloWorld.java:20)

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

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

一个不清楚的想法:在OS / X世界中,您通常指向App(IBM Notes.app),但内容实际上在appname.app/Contents/MacOS。我想我尝试了两个相同的结果。路径中的空间是否会被抛出?

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

  

liblsxbe.dylib:       @ executable_path / liblsxbe.dylib(兼容版本0.0.0,当前版本0.0.0)       @ executable_path / libxmlproc.dylib(兼容版本0.0.0,当前版本0.0.0)       @ executable_path / libnotes.dylib(兼容版本0.0.0,当前版本0.0.0)       /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon(兼容版本2.0.0,当前版本157.0.0)       /usr/lib/libstdc++.6.dylib(兼容版本7.0.0,当前版本60.0.0)       /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1197.1.1)

otool -L libxmlproc.dylib

  

libxmlproc.dylib:       @ executable_path / libxmlproc.dylib(兼容版本0.0.0,当前版本0.0.0)       @ executable_path / libnotes.dylib(兼容版本0.0.0,当前版本0.0.0)       /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon(兼容版本2.0.0,当前版本157.0.0)       /usr/lib/libstdc++.6.dylib(兼容版本7.0.0,当前版本60.0.0)       /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1197.1.1)

`otool -L libnotes.dylib'

  

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

还有什么?

2 个答案:

答案 0 :(得分:1)

经过多次探索后,事实证明有两个问题需要解决。第一个是在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运行配置中不需要引号或反斜杠。

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

Mac不再那样了(不再)了。有一次我指着一个赤裸裸的" JVM8并将Notes.jar添加为外部Jar依赖项,一切都按预期开始工作。

答案 1 :(得分:1)

我一直在努力解决几乎同样的问题。我按照您在答案的第一部分中所做的那样做,即将Eclipse中的环境变量设置为以下

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

我还在我的.bashrc文件中写道:

PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/myuser/bin:/Applications/IBM\ Notes.app/Contents/MacOS

在我的.profile

export DYLD_LIBRARY_PATH=/Applications/IBM\ Notes.app/Contents/MacOS
export PATH=$PATH

# Update bashrc 
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

我一直在尝试使用Eclipse Mars,但似乎PATH和java.library.path都不正确。我厌倦了火星,决定下载氧气。我不知道为什么,但是在我安装Oxygen之后,将环境变量添加到Eclipse中,并且使用Java 1.8,我能够通过您的示例获得我的有效用户名,并且相同的解决方案适用于我们正在开发的更大的应用程序。

我只是将这个答案作为你答案的补充。我很高兴我发现了这个问题。谢谢。