2012-09-23 78 views
1

我从here下载了Tesseract OCR for Android,我试图用NDK将它构建为我自己的应用程序的库项目。我收到了一些有关如何执行此操作的有用反馈here。首先,我做这在命令行([路径]是的路径苔丝个项目的简写):UnsatisfiedLinkError - Tesseract for Android

> cd [path]\tess-two 

> C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build -j8 

"Compile thumb : lept <= adaptmap.c 

[...] 

"Compile++ thumb : lept <= writefile.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/ 

"Compile++ thumb : tess <= applybox.cpp 

[...] 

"Compile++ thumb : tess <= tessbaseapi.cpp 

"Compile thumb : lept <= adaptmap.c 

[...] 

"Compile++ thumb : lept <= pixa.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/ 

"Compile++ thumb : lept <= jni.cpp 

[...] 

"Compile++ thumb : tess <= tessbaseapi.cpp 

"Compile x86 : lept <= affine.c 

[...] 

"Compile++ x86 : lept <= readfile.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/x86/ 

"Compile++ x86 : tess <= baseapi.cpp 

[...] 

"Compile++ x86 : tess <= wordclass.cpp 

SharedLibrary : liblept.so 

SharedLibrary : liblept.so 

"Compile++ x86 : tess <= tessbaseapi.cpp 

SharedLibrary : liblept.so 

"Compile++ x86 : tess <= wordrec.cpp 

SharedLibrary : libtess.so 

Install  : liblept.so => libs/x86/liblept.so 

Install  : liblept.so => libs/armeabi/liblept.so 

SharedLibrary : libtess.so 

Install  : liblept.so => libs/armeabi-v7a/liblept.so 

SharedLibrary : libtess.so 

Install  : libtess.so => libs/armeabi/libtess.so 

Install  : libtess.so => libs/armeabi-v7a/libtess.so 

Install  : libtess.so => libs/x86/libtess.so 


> C:\Users\User\android-sdk\tools\android.bat update project --path . 

Failed to convert path to a short DOS path: C:\Windows\system32\java.exe 
'javaw_exe' is not recognized as an internal or external command, 
operable program or batch file. 
Updated local.properties 

Updated file [path]\tess-two\proguard-project.txt 

It seems that there are sub-projects. If you want to update them 

please use the --subprojects parameter. 

> set JAVA_HOME=C:\Java\JDK 
> Buildfile: [path]\tess-two\build.xml 

-set-mode-check: 

-set-release-mode: 

-release-obfuscation-check: 
    [echo] proguard.config is ${proguard.config} 

-check-env: 
[checkenv] Android SDK Tools Revision 20.0.3 
[checkenv] Installed at C:\Users\User\android-sdks 

-setup: 
    [echo] Project Name: tess-two 
    [gettype] Project Type: Android Library 

-build-setup: 
    [echo] Resolving Build Target for tess-two... 
[gettarget] Project Target: Google APIs 
[gettarget] Vendor:   Google Inc. 
[gettarget] Platform Version: 4.1 
[gettarget] API level:  16 
    [echo] ---------- 
    [echo] Creating output directories if needed... 
    [echo] ---------- 
    [echo] Resolving Dependencies for tess-two... 
[dependency] Library dependencies: 
[dependency] No Libraries 
[dependency] 
[dependency] ------------------ 
[dependency] API<=15: Adding annotations.jar to the classpath. 
    [echo] ---------- 
    [echo] Building Libraries with 'release'... 
    [subant] No sub-builds to iterate on 

-pre-build: 

-code-gen: 
[mergemanifest] Found Deleted Target File 
[mergemanifest] Merging AndroidManifest files into one. 
[mergemanifest] Manifest merger disabled. Using project manifest only. 
    [echo] Handling aidl files... 
    [aidl] No AIDL files to compile. 
    [echo] ---------- 
    [echo] Handling RenderScript files... 
[renderscript] No RenderScript files to compile. 
    [echo] ---------- 
    [echo] Handling Resources... 
    [aapt] Found new input file 
    [aapt] Generating resource IDs... 
    [echo] ---------- 
    [echo] Handling BuildConfig class... 
[buildconfig] No need to generate new BuildConfig. 

-pre-compile: 

-compile: 
    [echo] Creating library output jar file... 

-post-compile: 

-obfuscate: 

-dex: 
    [echo] Library project: do not convert bytecode... 

-crunch: 
    [crunch] Crunching PNG Files in source dir: [path]\tess-two\res 
    [crunch] To destination dir: [path]\tess-two\bin\res 
    [crunch] Crunched 0 PNG files to update cache 

-package-resources: 
    [echo] Library project: do not package resources... 

-package: 
    [echo] Library project: do not package apk... 

-post-package: 

-release-prompt-for-password: 

-release-nosign: 
    [echo] 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 

-release-sign: 

-post-build: 

release: 

BUILD SUCCESSFUL 
Total time: 1 second 

然后,我这样做: 文件 - >导入 - > Android的 - >现有代码进入工作区 - >浏览 - >选择当前工作区目录 - >确保在出现的列表中选择了tess-two - >完成。

然后我右键单击我自己的应用程序,进入属性 - > Android选项卡 - >添加...(在库部分下) - >选择tess-two - >单击确定 - >检查“库” - >好的。

然而,这一切后,我还是运行我的应用程序时,你得到follwing错误:

09-23 13:02:42.532: E/AndroidRuntime(675): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept: findLibrary returned null 
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.Runtime.loadLibrary(Runtime.java:365) 
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.System.loadLibrary(System.java:535) 
09-23 13:02:42.532: E/AndroidRuntime(675): at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:47) 

为自己的应用程序的project.properties是:

target=android-16 
android.library.reference.1=..\\OpenCV\\sdk\\java 
android.library.reference.2=../Tesseract/tess-two 
android.library=true 

这是怎么回事?

+0

如果任何人都可以给我一些关于我应该包含哪些其他信息以帮助他人回答问题的反馈,我真的很感激。 –

+0

也包括你的project.properties。 – rmtheis

+1

请勿为自己的项目检查“is Library”。苔丝二应该是图书馆项目。 – rmtheis

回答

1

我明白了,问题在于我没有正确地初始化我的代码中的API。正确的语法是:

tesseract.init("/mnt/sdcard/", "eng"); 

假设你已经有了下MNT/SD卡的文件夹“tessdata”。现在它完美加载!非常感谢您的帮助!

+0

嗨plz帮我在哪里我要写这行可以üPLZ提及在哪个类 –

0

我,而不是2调用LoadLibrary我做了所有4作为

System.loadLibrary("jpgt"); System.loadLibrary("pngt"); System.loadLibrary("lept"); System.loadLibrary("tess"); 和它的工作。