私は、Koper (koper.googlecode.com) のフォークである Sumerian (github.com/ryanthejuggler/Sumerian) と呼ぶプログラムに取り組もうとしています。jar から Koper を実行すると、問題なく読み込まれ、プログラムを使用できます。私は少し改善して再コンパイルしましたが、今ではeinkfbライブラリが見つかりませんlibeinkfb.so
. これを以下の出力の 2 行目にリストされている場所にコピーしましたが、プログラムは jar から実行した場合にのみ実行されます。
私のリファクタリングの一部は、すべてをパッケージに入れることでした。元のコードはフラットな構造でした。
また、JAR マニフェストも確認しました。これは非常に基本的なもので、バージョンとエントリ クラスのみを定義しています。
Java プログラムが参照できるようにするには、.so ファイルをどこに置く必要がありますか?
私のコードを実行しようとしています:
[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");