2

现在我正在使用 Tessaract 和 Android NDK 在 MacOSx 上制作应用程序。我使用 Eclipse 作为 IDE 来开发程序。

我有两个问题要问:

1)。我使用最著名的示例“tess-two”设置了 tessaract,并进行了一些修改以适应我现有的代码。我将文件夹“com_googlecode_leptonica_android”和“com_googlecode_tessaract_android”复制到 /jni 文件夹。然后编辑 Android.mk 以设置这些库文件夹的路径。一切正常!除了一件事..每次我构建项目时,我都需要一次又一次地构建“leptonica”和“tessaract”库..为了获得 libtess 和 liblept.. 这需要很长时间。我怎样才能编辑android makefile(Android.mk)而不是构建那些库..只编译我的代码......就是这样......这是我的Android.mk

LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
TESSERACT_PATH := $(call my-dir)/com_googlecode_tesseract_android
LEPTONICA_PATH := $(call my-dir)/com_googlecode_leptonica_android

include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
include /Applications/eclipse-android/OpenCV-2.4.3-android-sdk/sdk/native/jni/OpenCV.mk

LOCAL_PATH := $(MY_PATH)
LOCAL_MODULE    := my_project
LOCAL_SRC_FILES := cppmain.cpp
LOCAL_LDLIBS +=  -llog -ldl

include $(BUILD_SHARED_LIBRARY)
)

2)。我发现了很多关于在 Android 中使用 tessaract 的例子。然而,他们中的大多数使用 tessaract 和 Java(通过 JNI 调用)并从 Java 代码调用 JNI(Java -> Tessaract C++ JNI -> Tessaract C++)。我找不到任何从 c++ NDK(Java -> my JNI -> my C++ -> Tessract C++)调用 tessaract 的示例。我想直接从 c++ 调用 tessaract 的原因是可移植性。

4

1 回答 1

1

使用PREBUILT_STATIC_LIBRARY,例如

LOCAL_PATH = $(MY_PATH)/com_googlecode_tesseract_android/lib
include $(CLEAR_VARS)
LOCAL_MODULE := tesseract
LOCAL_SRC_FILES := libtesseract.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_PATH = $(MY_PATH)/com_googlecode_leptonica_android/lib
include $(CLEAR_VARS)
LOCAL_MODULE := leptonica
LOCAL_SRC_FILES := libleptonica.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_PATH := $(MY_PATH)
LOCAL_MODULE    := my_project
LOCAL_SRC_FILES := cppmain.cpp
LOCAL_LDLIBS +=  -llog -ldl
LOCAL_LDFLAGS += -ltesseract -lleptonica

include $(BUILD_SHARED_LIBRARY)

tesseract 项目不包含预构建的库,但是如果您按照官方说明进行构建,这些库将被构建。使用 PREBUILT_STATIC_LIBRARY 只会帮助您一直避免不必要地重建这些库。只要您不自己更改这些库,建议对 libjpeg 和 libpng 使用相同的方法。

于 2013-02-10T20:09:41.970 回答