簡體   English   中英

在 OS X El Capitan 上運行 IBM Notes Java 應用程序會引發 UnsatisfiedLinkError

[英]Running an IBM Notes Java Application on OS X El Capitan throws UnsatisfiedLinkError

我正在嘗試運行訪問 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/Extensions: /usr/lib/java:. 路徑:/Applications/IBM Notes.app:/usr/bin:/bin:/usr/sbin:/sbin 線程“main”中的異常 java.lang.UnsatisfiedLinkError:在 java.lang 的 java.library.path 中沒有 lsxbe。 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來源) 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 ... 在 OS/X 上似乎有問題

一個不清楚的想法:在 OS/X 世界中,您通常指向應用程序 (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個問題需要解決。 第一個,在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 依賴項,一切都開始按預期工作。

我一直在努力解決幾乎相同的問題。 我按照您在答案的第一部分中所做的那樣,即將 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 之后,我能夠通過您的示例獲得我的有效用戶名,並且相同的解決方案適用於我們正在開發的更大的應用程序。

我只是將此答案添加為您的答案的補充。 我很高興我在 SO 上發現了這個問題。 謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM