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

java.lang.UnsatisfiedLinkError:org.sqlite.core.nativeDB.open(),java,sqlite,ubuntu,Java,Sqlite,Ubuntu,我已经构建了一个使用SQLite(SQLite-jdbc-3.8.7.jar)的Java应用程序,并将所有内容都集成到一个jar文件中。在windows上运行jar文件正如预期的那样工作,但是在Ubuntu服务器14.04上运行jar文件已经变成了一项艰巨的任务!我在VirtualBox中组装了一台全新的虚拟机进行测试。我安装了Java(sudo-apt-get-install-default-jre),并尝试从存储库以及下载tar和编译来安装SQLite。SQLite的安装方式很好,因为我可以

我已经构建了一个使用SQLite(SQLite-jdbc-3.8.7.jar)的Java应用程序,并将所有内容都集成到一个jar文件中。在windows上运行jar文件正如预期的那样工作,但是在Ubuntu服务器14.04上运行jar文件已经变成了一项艰巨的任务!我在VirtualBox中组装了一台全新的虚拟机进行测试。我安装了Java(sudo-apt-get-install-default-jre),并尝试从存储库以及下载tar和编译来安装SQLite。SQLite的安装方式很好,因为我可以从终端访问它。我在我的主目录中创建了一个新的子目录,并复制到我的appjar文件上。然后从终端运行命令sudojava-jar.jar,我收到一个java.lang.unsatifiedlinkerror。请看附件中的图片,要在Ubuntu上运行,还必须做些什么?任何帮助都将不胜感激


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

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

sqlite将本机库写入tmpdir并尝试使用它。如果tmp dir位于安装了noexec的文件系统上,则此操作将失败,并可能显示与您看到的类似的错误

避免这种情况的一种方法是像其他答案所指出的那样设置JavaTMPDIR。另一种方法是从tmpfs中删除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在这里试图执行的操作)

将此添加到您的代码中,并查看您的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或权限不正确。

是的,我使用maven在JAR中打包,并且还必须恢复到3.7.2依赖项。