在 Linux 上的 Eclipse RCP 应用程序中加载本机库

Load native libraries in an Eclipse RCP application on Linux

我有一个 Eclipse RCP 应用程序,它通过 JNI 使用一些本机库。这些是相互动态 link 的共享库。在 Windows 上,我将这些库(作为 *.dll 文件)放在 RCP 启动程序可执行文件 (*.exe) 旁边,并通过 System.load("<absolute file path>") 加载它们。这很好用,因为启动器的位置似乎已添加到 java.library.path 中,因此库之间的动态 linking 可以正常工作。

在 Linux,我得到一个 UnsatisfiedLinkError。启动器的位置未添加到 java.library.path。当我在设置 LD_LIBRARY_PATH 变量后从终端启动应用程序时,它起作用了:

export LD_LIBRARY_PATH=.
./myApp

位置 . 已添加到 java.library.path。有一个更好的方法吗?我希望用户只需双击启动器。

myApp.ini 文件中设置 -Djava.library.path=. 也不起作用。我在安装详细信息中看到它,但我仍然得到 UnsatisfiedLinkError.

查找库的最可靠方法根本不是使用 java.library.path,而是通过 Java 代码找到它们并通过 System.load() 而不是 System.loadLibrary() 加载。您可以应用您想要的任何逻辑来查找本机库(尽管最好不要太聪明),如果您的机制失败,您可以退回到尝试 java.library.path

这当然只有在库不依赖于可能找不到的其他库的情况下才有效。