我正在尝试在我最后一年的项目中使用一个名为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。
任何在这方面有一点知识的人都会有很大的帮助!