libfprintという最終年度のプロジェクトでパッケージを使用しようとしています。これは、オープンソースの指紋リーダー SDK です。プロジェクトを Java で行っているため、libfprint 機能を移植する必要があります。
運が良かったのですが、誰かがすでにこれを行っていることがわかりました。jlibfprintと呼ばれるパッケージは、libfprint の JNI ラッパーです。
そこで、セットアップのために jlibfprint と libfprint の両方の指示に従いました。libfprint は多かれ少なかれ正常に動作します。jlibfprintについては、入手したサンプルプログラムを実行してみたところ、
Exception in thread "main" java.lang.UnsatisfiedLinkError: no JlibFprint_jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at JlibFprint.<clinit>(JlibFprint.java:28)
at SampleRun.main(SampleRun.java:30)
JlibFprint.(JlibFprint.java:28)
を指している
static {
System.loadLibrary("JlibFprint_jni");
}
そこで、プロジェクトのプロパティを調べて、「ネイティブ ライブラリの場所」フィールドに到達し、それをlibJlibFprint_jni.so という単一のファイルを含むディレクトリにポイントします。
プログラムを実行すると、エラーが表示されます。
Exception in thread "main" java.lang.UnsatisfiedLinkError: JlibFprint.enroll_finger()LJlibFprint$fp_print_data;
at JlibFprint.enroll_finger(Native Method)
at SampleRun.main(SampleRun.java:36)
Enroll the first finger...
サンプル Java ファイルは次のとおりです。
SampleRun.java
public class SampleRun {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JlibFprint jlibfprint = new JlibFprint();
JlibFprint.fp_print_data pd1, pd2;
int matchValue;
try
{
System.out.println("Enroll the first finger...");
pd1 = jlibfprint.enroll_finger();
System.out.println("Compare the previous acquisition with the next one...");
pd2 = jlibfprint.enroll_finger();
matchValue = JlibFprint.img_compare_print_data(pd1, pd2);
System.out.println(matchValue);
if (matchValue > JlibFprint.BOZORTH_THRESHOLD)
{
System.out.println("[OK] The two fingerprints are compatible!");
}
else
{
System.out.println("[FAIL] The two fingerprints are not compatible!");
}
}
catch (JlibFprint.EnrollException e)
{
System.err.format("Enroll Exception [%d]\n", e.enroll_exception);
e.printStackTrace();
}
}
}
Eclipse Juno で Ubuntu 11.10 を使用しています。
この分野の知識があれば誰でも大助かりです!