我正在尝试开发一个名为 Sumerian (github.com/ryanthejuggler/Sumerian) 的程序,它是 Koper (koper.googlecode.com) 的一个分支。当我从 jar 中运行 Koper 时,它可以正常加载并且我可以使用该程序。我做了一些改进和重新编译,但现在它找不到存储在libeinkfb.so
. 我已将其复制到下面输出的第二行中列出的位置,但该程序仍然仅在我从 jar 中运行时运行。
我重构的一部分是将所有东西都放在包中;原始代码具有扁平结构。
另外,我查看了 JAR 清单;这是非常基本的,只定义版本和入口类。
我必须将 .so 文件放在哪里,以便我的 Java 程序可以看到它?
尝试运行我的代码:
[root@(none) bin]# java com.ramuller.sumerian.Sumerian
/qte/lib:lib::/usr/java/packages/lib/arm:/lib:/usr/lib
construct EInkFB
java.lang.UnsatisfiedLinkError: com.ramuller.sumerian.display.eink.EInkFB.open(Ljava/lang/String;)Ljava/nio/ByteBuffer;
at com.ramuller.sumerian.display.eink.EInkFB.open(Native Method)
at com.ramuller.sumerian.display.eink.EInkFB.<init>(EInkFB.java:113)
at com.ramuller.sumerian.Sumerian.main(Sumerian.java:72)
construct Display width=600 height=800Creating SwingDisplay...
Exception in thread "main" java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at javax.swing.JFrame.<init>(JFrame.java:224)
at com.ramuller.sumerian.display.SwingDisplay.<init>(SwingDisplay.java:21)
at com.ramuller.sumerian.Sumerian.main(Sumerian.java:90)
之后立即运行 .jar,无需配置:
[root@(none) bin]# java -jar ../Koper.jar
User directory: /mnt/sd/bin
/qte/lib:lib::/usr/java/packages/lib/arm:/lib:/usr/lib
construct EInkFB
The framebuffer device was opened successfully.
^C[root@(none) bin]# java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) Client VM (build 23.2-b09, mixed mode)
编辑我目前正在加载代码:
System.loadLibrary("einkfb");