在 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
。
这当然只有在库不依赖于可能找不到的其他库的情况下才有效。
我有一个 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
。
这当然只有在库不依赖于可能找不到的其他库的情况下才有效。