现在我正在使用 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 调用 tessaract 的示例(Java -> 我的 JNI -> 我的 C++ -> Tessract C++)。我想直接从 C++ 调用 tessaract 的原因是可移植性。
最佳答案
使用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 使用相同的方法,只要您不自己更改这些库即可。
关于android - 避免冗余构建以制作 tessaract android 库 && 将 tessaract 库链接到 c++ NDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597055/