如何在使用Eclipse时将特定于平台的本地库包含在.JAR文件中?

8

我刚开始学习JNI。我一直在跟随一个简单的例子,创建了一个Java应用程序,调用本地库中的Hello World方法。我想要针对Win32和Linux x86进行目标设置。

我的库驻留在DLL中,当将DLL添加到Eclipse项目的根目录时,使用LoadLibrary可以正常调用它。
但是,我无法弄清楚如何让Eclipse导出可运行的JAR文件,其中包括DLL和Linux的.SO文件。

所以,我的问题基本上是;您会如何在Eclipse中创建一个项目并包含同一本地库的几个版本?

谢谢,
Martin


在每个Eclipse对话框中,它似乎都要我指向一个本地库的JAR文件。我已经尝试将我的库压缩成一个JAR并引用它,但是没有成功。这样的JAR文件应该包含什么? - Martin Wiboe
2个回答

4
对于可运行的JAR文件,您需要做的是将其提取到临时目录(可能在静态{}块中),然后从该目录加载DLL(在同一块中使用System.loadLibrary()) 。为此,您需要子类化ClassLoader并覆盖findLibrary()方法以允许在该目录中找到库。您可以在此处执行所需的逻辑以加载特定平台库。老实说,不同平台的库命名应该是相似的--我相信在加载时省略了“lib”部分和扩展名。这就是要点。也许像其他帖子提到的那样,使用One-JAR可能更容易 :)

2
谢谢-我通过将库包含为资源并在运行时提取它来解决了问题。然后可以使用System.load()加载它。选择这个作为正确答案是因为它更详细,不过我会去看看One-Jar。 - Martin Wiboe

3

您可能想查看One-JAR项目。它允许您将应用程序及其依赖项(包括本地库)打包到单个jar文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接