java.lang.UnsatisfiedLinkError:org.sqlite.core.nativeDB.open()

时间:2014-11-13 14:38:45

标签: java sqlite ubuntu

我构建了一个使用SQLite(sqlite-jdbc-3.8.7.jar)的Java应用程序,并将所有内容都转换为jar文件。在Windows上运行jar文件按预期工作,然而,尝试在Ubuntu Server 14.04上运行它已经变成了一个相当大的任务!我在VirtualBox中组装了一个全新的虚拟机进行测试。我安装了Java(sudo apt-get install default-jre)并尝试从存储库安装SQLite并下载tar和编译。 SQLite安装得很好,因为我可以从终端访问它。我在我的主目录中创建了一个新的子目录,并复制到我的app jar文件中。从终端,我然后运行命令:sudo java -jar .jar,我收到一个java.lang.unsatisfiedlinkerror。请参阅附图,还有什么必须做才能让它在Ubuntu上工作?任何帮助将不胜感激!

enter image description here

4 个答案:

答案 0 :(得分:6)

我有类似的问题,并恢复到sqlite-jdbc-3.7.2为我工作(Ubuntu 14.04 32位)

答案 1 :(得分:2)

好吧,我有类似的问题,我不得不恢复到sqlite-jdbc-3.7.2.jar包,因为由于某种原因,较新的包中的驱动程序在我的64位Linux下无法工作(dreamhost所谓的vps )服务器。较新的软件包在Windows 8.1 x64中没有问题。我还必须将tmp dir移动到home(System.setProperty(“java.io.tmpdir”,“/ home / username /");).

答案 2 :(得分:1)

Sqlite将本机lib写入tmpdir并尝试使用它。如果tmp dir位于安装了noexec的文件系统上,则会失败,并且可能会显示错误,就像您所看到的一样。

避免这种情况的一种方法是设置java tmpdir,正如其他答案所指出的那样。另一种方法是从你的tmp fs中删除noexec。

检查:

$ mount | grep /tmp
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,noatime,size=6291456k)

要更改此设置,请编辑/ etc / fstab,从/ tmp行中删除noexec,然后重新启动或重新安装/tmp;

$ mount -o remount /tmp

(请注意,noexec被视为安全功能,因为它可以防止恶意应用完全执行SQLite在此处尝试执行的操作。

答案 3 :(得分:0)

将此添加到您的代码中,看看您的tmpdir是否存在问题......

     final File tmp = new File(System.getProperty("java.io.tmpdir")); 
 if (!tmp.exists() || !tmp.isDirectory() || !tmp.canRead() || !tmp.canWrite()){
     System.err.println("@PFTcreateDB - Issue with java.io.tmpdir");
 }

这可能表示缺少tmp或不正确的权限。