linux中的Sqlite java.lang.UnsatisfiedLinkError

时间:2014-08-19 17:15:16

标签: java linux eclipse sqlite runtime-error

我有一个使用Sqlite数据库的程序。它可以在Windows上运行(导出的jar或直接在Eclipse中)但是当我将它移动到linux服务器时(计划是使用它以一定的间隔运行它,cron job)。我将它从Eclipse导出到jar并用它打包sqlite-jdbc4-3.8.2-SNAPSHOT.jar。错误是这样的:

/$ /usr/bin/java -jar /home/username/Software.jar /home/username/
java.lang.UnsatisfiedLinkError: /tmp/sqlite-3.8.2-amd64-libsqlitejdbc.so: /tmp/sqlite-3.8.2-amd64-libsqlitejdbc.so: failed to map segment from shared object: Operation not permitted
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
    at org.sqlite.core.NativeDB._open(Native Method)
    at org.sqlite.core.DB.open(DB.java:161)
    at org.sqlite.core.CoreConnection.open(CoreConnection.java:145)
    at org.sqlite.core.CoreConnection.<init>(CoreConnection.java:66)
    at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:21)
    at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:23)
    at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:44)
    at org.sqlite.JDBC.createConnection(JDBC.java:113)
    at org.sqlite.JDBC.connect(JDBC.java:87)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    ....

所以在你问之前,我已经确定/ tmp /中的sqlite-3.8.2-amd64-libsqlitejdbc.so具有所有权限(rwxrwxrwx)。仍然是本机库导致问题。它确实被复制到/ tmp /文件夹中。话虽如此,我完全厌倦了Linux ...因为这个原因我几乎无能为力下一步尝试。

我该怎么办?开关连接器?

编辑: 通过使用System.setProperty(“java.io.tmpdir”,“/ home / username /”)解决了这个问题;显然它出于某种原因无法从tmp文件夹执行本机库...可能是因为它是由root创建的。此外,我不得不恢复到sqlite-jdbc-3.7.2.jar,因为新版本在linux上崩溃了。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且在this GitHub issue中找到了解决方案:

JAVA_OPTS=-Djava.io.tmpdir=/path/to/some/other/tmpdir bin/cerebro

还要看看this other SO answer