1

这是我运行应用程序时得到的 logcat 报告

07-06 15:39:40.151: E/AndroidRuntime(6777): FATAL EXCEPTION: main
07-06 15:39:40.151: E/AndroidRuntime(6777): java.lang.ExceptionInInitializerError
07-06 15:39:40.151: E/AndroidRuntime(6777):     at edu.sfsu.cs.orange.ocr.CaptureActivity.initOcrEngine(CaptureActivity.java:714)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at edu.sfsu.cs.orange.ocr.CaptureActivity.onResume(CaptureActivity.java:371)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1184)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.Activity.performResume(Activity.java:5082)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2569)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2607)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2093)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread.access$600(ActivityThread.java:134)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.os.Looper.loop(Looper.java:137)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at android.app.ActivityThread.main(ActivityThread.java:4744)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at java.lang.reflect.Method.invokeNative(Native Method)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at java.lang.reflect.Method.invoke(Method.java:511)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at dalvik.system.NativeStart.main(Native Method)
07-06 15:39:40.151: E/AndroidRuntime(6777): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept: findLibrary returned null
07-06 15:39:40.151: E/AndroidRuntime(6777):     at java.lang.Runtime.loadLibrary(Runtime.java:365)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at java.lang.System.loadLibrary(System.java:535)
07-06 15:39:40.151: E/AndroidRuntime(6777):     at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:44)
07-06 15:39:40.151: E/AndroidRuntime(6777):     ... 17 more

我正在尝试使用我下载的 tess-two 库运行 OCR 应用程序。我在 Eclipse 中打开了这个项目,并将其作为库添加到我的项目中。但是当我启动应用程序时,它会崩溃给我上面的日志。在运行我的应用程序之前是否需要编译 tess 两个库。如果是这样,请帮助我如何在 Windows 8 计算机上编译它。

4

1 回答 1

0

查看 Stack-Trace 的底部:

Caused by: java.lang.UnsatisfiedLinkError: Couldnt load lept: findLibrary returned null
    at java.lang.Runtime.loadLibrary(Runtime.java:365)
    at java.lang.System.loadLibrary(System.java:535)
    [...]

在您的代码中,您正在使用本机库(例如,用 C/C++ 编写并与JNI接口的库)。这里的问题是,Android 找不到库文件。因此,UnsatisfiedLinkError被抛出。

您的应用程序的本机源代码应位于jni/项目的 - 子目录中。您还需要一个构建脚本来使用 NDK 交叉编译器构建您的源代码。在您的情况下,这些文件随 library 一起提供

通常,编译.so后的 -files 进入libs/项目的 -folder,然后可以使用System.loadLibrary(String)-method加载,通常放在静态初始化块中:

System.loadLibrary("filename");

可以在此处找到有关库放置的更多信息:如何将本机库(.so 文件)导入 Eclipse?

于 2013-07-07T01:22:30.763 回答