android - 避免冗余构建以制作 tessaract android 库 && 将 tessaract 库链接到 c++ NDK

标签 android makefile java-native-interface tesseract

现在我正在使用 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/

相关文章:

java - 如何在 Android 单元测试中调用测试监听器接口(interface)

javascript - 安卓服务webview

android - SearchView 中的筛选文本显示未删除

c - 如何在Makefile中循环遍历n个测试用例?

java - 如何从 XML 获取默认值(不起作用)

makefile - 使用 CMake 生成的 makefile 的并行作业(没有速度改进)

java - JNI 字符串返回值

android - 是否可以在 Android 应用程序中通过 JNI 打印 C 代码控制台输出?

java - 无法在 Ubuntu 13.04 的 R 3.0 中安装 rJava

r - 在 RStudio 中使用 Makefile