Компиляция тессеракта через андроид NDK - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь скомпилировать Тессеракт для Android с помощью Android ndk R5, код Тессеракт получен путем проверки http://code.google.com/p/tesseract-android-tools/, Я не могу скомпилировать Тессеракт и получил ошибки,

Install        : libjpeg.so => libs/armeabi/libjpeg.so
make: *** No rule to make target `//cygdrive/e/DemoExamples_WorkSpace/tesseract-android-tools/jni/../external/leptonlib-1.66/src/adaptmap.c', needed b
y `/cygdrive/e/DemoExamples_WorkSpace/tesseract-android-tools/obj/local/armeabi/objs/lept//cygdrive/e/DemoExamples_WorkSpace/tesseract-android-tools/j
ni/../external/leptonlib-1.66/src/adaptmap.o'.  Stop.

Пожалуйста, помогите мне разобраться с этой проблемой.

Ответы [ 3 ]

1 голос
/ 19 марта 2012

У меня была такая же проблема, и я думаю, что решил ее.Может быть полезно для тех, кто получает подобные ошибки:

В OSX я просто изменил файлы Android.mk, указав абсолютные пути следующим образом:

Первое: jni / Android.mk

TESSERACT_PATH := /Users/.../tesseract-android-tools/tesseract-android-tools/external/tesseract-3.00
LEPTONICA_PATH := /Users/.../tesseract-android-tools/tesseract-android-tools/external/leptonlib-1.66
LIBJPEG_PATH := /Users/.../tesseract-android-tools/tesseract-android-tools/external/libjpeg

Затем: jni / com_googlecode_leptonica_android / Android.mk

REAL_LOCAL_PATH := /Users/.../tesseract-android-tools/tesseract-android-tools/jni/com_googlecode_leptonica_android

и jni / com_googlecode_tesseract_android / Android.mk соответственно.

Я полагаю, что проблема вызвана относительным путем, который возвращается следующей командой:

$(call my-dir)

Затем мне нужно было запустить ndk-build как суперпользователь и все отлично скомпилировано.

0 голосов
/ 05 октября 2011

Итак, я скомпилировал в Windows 7 и Windows XP, но это уродливый обходной путь.

Основная проблема - "LOCAL_PATH: =" с пустым значением, я не знаю, почему Cygwin имеетпроблема с этим, поэтому вы должны изменить пути к файлам Android.mk для работы.

Я буду ссылаться на Android.mk, используя цифры, мой путь jni:

-jni
    Android.mk(1)
    Aplication.Mk
    -com_googlecode_tesseract_android(dir)
        Android.mk(2)
                tesseract(dir) 
    -com_googlecode_leptonica_android(dir)
        Android.mk(3)
                leptonlib(dir)
    -libjpeg
        Android.mk(4)

=================================

Android.mk(1)
Put tesseract and leptonica sources on googlecode subdirectories like this:

TESSERACT_PATH := $(call my-dir)/com_googlecode_tesseract_android/tesseract -- directory to source, change for respective name
LEPTONICA_PATH := $(call my-dir)/com_googlecode_leptonica_android/leptonlib -- directory to source, change for respective name
LIBJPEG_PATH := $(call my-dir)/libjpeg

=================================

Android.mk(2)

1 - Change:

LOCAL_PATH:= 

to

LOCAL_PATH:= $(call my-dir)

2 - Change:

BLACKLIST_SRC_FILES := \
  %endiantest.c \
  %freetype.c \
  %xtractprotos.c
LOCAL_SRC_FILES := \
  $(filter-out $(BLACKLIST_SRC_FILES),$(wildcard $(LEPTONICA_PATH)/src/*.c))

to

LOCAL_SRC_FILES := \
    leptonlib/src/adaptmap.c \
    leptonlib/src/affine.c \
    leptonlib/src/affinecompose.c \ ... continue (Put all the files on src directory, without files listed on blacklist).
Note: replace leptonlib for subrectory name of leptonlib source.


3- Change:

ifneq ($(TARGET_SIMULATOR),true)
LOCAL_SRC_FILES += \
  $(REAL_LOCAL_PATH)/stdio/open_memstream.c \
  $(REAL_LOCAL_PATH)/stdio/fopencookie.c \
  $(REAL_LOCAL_PATH)/stdio/fmemopen.c
LOCAL_C_INCLUDES += \
  $(REAL_LOCAL_PATH)/stdio
endif

# jni

LOCAL_SRC_FILES += \
  $(REAL_LOCAL_PATH)/box.cpp \
  $(REAL_LOCAL_PATH)/pix.cpp \
  $(REAL_LOCAL_PATH)/pixa.cpp \
  $(REAL_LOCAL_PATH)/utilities.cpp \
  $(REAL_LOCAL_PATH)/readfile.cpp \
  $(REAL_LOCAL_PATH)/writefile.cpp \
  $(REAL_LOCAL_PATH)/jni.cpp

LOCAL_C_INCLUDES += \
  $(REAL_LOCAL_PATH) \
  $(LEPTONICA_PATH)/src


to 

ifneq ($(TARGET_SIMULATOR),true)
LOCAL_SRC_FILES += \
  stdio/open_memstream.c \
  stdio/fopencookie.c \
  stdio/fmemopen.c
LOCAL_C_INCLUDES += \
  stdio
endif

# jni

LOCAL_SRC_FILES += \
  box.cpp \
  pix.cpp \
  pixa.cpp \
  utilities.cpp \
  jni.cpp

LOCAL_C_INCLUDES += \
  leptonlib/src

=================================

Android.mk(3)

1 - Change:

LOCAL_PATH:= 

to

LOCAL_PATH:= $(call my-dir)


2 - Change

On LOCAL_SRC_FILES change $(TESSERACT_PATH) to tesseract --Note: replace tesseract for subrectory name of tesseract source.

DON´T REPLACE $(TESSERACT_PATH) on LOCAL_C_INCLUDES only LOCAL_SRC_FILES.
DON´T REPLACE $(LEPTONICA_PATH) on LOCAL_C_INCLUDES.

3 - Change:

    In #jni

    LOCAL_SRC_FILES += \
      $(REAL_LOCAL_PATH)/tessbaseapi.cpp

    LOCAL_C_INCLUDES += \
      $(REAL_LOCAL_PATH) \
      $(TESSERACT_PATH)/api \
      $(LEPTONICA_PATH)/src

    to 

    LOCAL_SRC_FILES += \
      tessbaseapi.cpp

    LOCAL_C_INCLUDES += \
      $(LOCAL_PATH) \
      $(TESSERACT_PATH)/api \
      $(LEPTONICA_PATH)/src

Для меня работа над Windows 7, Windows XP, Mac и Ubuntu.

0 голосов
/ 09 сентября 2011

Поиск adaptmap среди make-файлов.Создайте make-файл, который сначала создает этот модуль.

...