2015-12-08 2 views
1

Я пытаюсь создать родную библиотеку, называемую приемной системой, которая вызывается из приложения для Android.NDK-build не создает файлы .so

Я думаю, что я правильно настроил все, так как NDK-build не обнаружил ошибок. Однако, когда я звоню System.loadLibrary("receiptrecognizer");, я получаю UnsatisfiedLinkError.

Причина этого заключается в отсутствии файла libreceiptrecognizer.so в пределах apk. На самом деле нет файла libreceiptrecognizer.so , созданного где угодно, когда я запускаю ndk-build.

Почему нет .so файла?

Recerecrecognizer использует openCV и tesseract (который, в свою очередь, использует leptonica).

Вот мой Android.mk:

LOCAL_PATH := $(call my-dir) 

    include $(CLEAR_VARS) 
    OPENCV_CAMERA_MODULES:=on 
    OPENCV_INSTALL_MODULES:=on 
    OPENCV_LIB_TYPE:=SHARED 
    include ../opencv4android/sdk/native/jni/OpenCV.mk 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := lept 
    LOCAL_SRC_FILES := ../../tess-two/libs/$(TARGET_ARCH_ABI)/liblept.so 
    include $(PREBUILT_SHARED_LIBRARY) 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := tess 
    LOCAL_SRC_FILES := ../../tess-two/libs/$(TARGET_ARCH_ABI)/libtess.so 
    include $(PREBUILT_SHARED_LIBRARY) 


    LOCAL_MODULE := receiptrecognizer 

    LOCAL_SRC_FILES := \ 
     src/OCRImagePreprocessor.cpp \ 
     src/util.cpp \ 
     ocrimagepreprocessorjni.cpp 

    LOCAL_C_INCLUDES := \ 
     $(LOCAL_PATH)/../../opencv4android/sdk/native/jni/include \ 
     $(LOCAL_PATH)/../../tess-two/jni/com_googlecode_leptonica_android/src/src \ 
     $(LOCAL_PATH)/../../tess-two/jni/com_googlecode_tesseract_android/src \ 
     $(LOCAL_PATH)/../../tess-two/jni/com_googlecode_tesseract_android/src/ccutil \ 
     $(LOCAL_PATH)/../../tess-two/jni/com_googlecode_tesseract_android/src/ccstruct \ 
     $(LOCAL_PATH)/../../tess-two/jni/com_googlecode_tesseract_android/src/ccmain \ 
     $(LOCAL_PATH)/jni/src \ 
     $(LOCAL_PATH)/jni \ 
     $(LOCAL_PATH)/src \ 
     $(LOCAL_PATH) 

    LOCAL_CFLAGS := \ 
     --std=c++11 

    LOCAL_SHARED_LIBRARIES := \ 
     opencv_java3 \ 
     lept \ 
     tess 

    include $(BUILD_SHARED_LIBRARY) 

А вот выход ndk-build (для некоторых предупреждений на переопределение команд для цели за исключением):

[armeabi] Prebuilt  : liblept.so <= jni/../../tess-two/libs/armeabi/ 
[armeabi] Install  : liblept.so => libs/armeabi/liblept.so 
[armeabi] Prebuilt  : libopencv_java3.so <= ../opencv4android/sdk/native/jni/../libs/armeabi/ 
[armeabi] Install  : libopencv_java3.so => libs/armeabi/libopencv_java3.so 
[armeabi] Compile++ thumb: receiptrecognizer <= OCRImagePreprocessor.cpp 
[armeabi] Compile++ thumb: receiptrecognizer <= util.cpp 
[armeabi] Compile++ thumb: receiptrecognizer <= ocrimagepreprocessorjni.cpp 
make.exe: Circular obj/local/armeabi/libtess.so <- obj/local/armeabi/libtess.so dependency dropped. 
[armeabi] Prebuilt  : libtess.so <= obj/local/armeabi/objs/receiptrecognizer/src/ 
[armeabi] Install  : libtess.so => libs/armeabi/libtess.so 
[armeabi-v7a] Prebuilt  : liblept.so <= jni/../../tess-two/libs/armeabi-v7a/ 
[armeabi-v7a] Install  : liblept.so => libs/armeabi-v7a/liblept.so 
[armeabi-v7a] Prebuilt  : libopencv_java3.so <= ../opencv4android/sdk/native/jni/../libs/armeabi-v7a/ 
[armeabi-v7a] Install  : libopencv_java3.so => libs/armeabi-v7a/libopencv_java3.so 
[armeabi-v7a] Compile++ thumb: receiptrecognizer <= OCRImagePreprocessor.cpp 
[armeabi-v7a] Compile++ thumb: receiptrecognizer <= util.cpp 
[armeabi-v7a] Compile++ thumb: receiptrecognizer <= ocrimagepreprocessorjni.cpp 
make.exe: Circular obj/local/armeabi-v7a/libtess.so <- obj/local/armeabi-v7a/libtess.so dependency dropped. 
[armeabi-v7a] Prebuilt  : libtess.so <= obj/local/armeabi-v7a/objs/receiptrecognizer/src/ 
[armeabi-v7a] Install  : libtess.so => libs/armeabi-v7a/libtess.so 
[x86] Prebuilt  : liblept.so <= jni/../../tess-two/libs/x86/ 
[x86] Install  : liblept.so => libs/x86/liblept.so 
[x86] Prebuilt  : libopencv_java3.so <= ../opencv4android/sdk/native/jni/../libs/x86/ 
[x86] Install  : libopencv_java3.so => libs/x86/libopencv_java3.so 
[x86] Compile++  : receiptrecognizer <= OCRImagePreprocessor.cpp 
[x86] Compile++  : receiptrecognizer <= util.cpp 
[x86] Compile++  : receiptrecognizer <= ocrimagepreprocessorjni.cpp 
make.exe: Circular obj/local/x86/libtess.so <- obj/local/x86/libtess.so dependency dropped. 
[x86] Prebuilt  : libtess.so <= obj/local/x86/objs/receiptrecognizer/src/ 
[x86] Install  : libtess.so => libs/x86/libtess.so 
[mips] Prebuilt  : liblept.so <= jni/../../tess-two/libs/mips/ 
[mips] Install  : liblept.so => libs/mips/liblept.so 
[mips] Prebuilt  : libopencv_java3.so <= ../opencv4android/sdk/native/jni/../libs/mips/ 
[mips] Install  : libopencv_java3.so => libs/mips/libopencv_java3.so 
[mips] Compile++  : receiptrecognizer <= OCRImagePreprocessor.cpp 
[mips] Compile++  : receiptrecognizer <= util.cpp 
[mips] Compile++  : receiptrecognizer <= ocrimagepreprocessorjni.cpp 
make.exe: Circular obj/local/mips/libtess.so <- obj/local/mips/libtess.so dependency dropped. 
[mips] Prebuilt  : libtess.so <= obj/local/mips/objs/receiptrecognizer/src/ 
[mips] Install  : libtess.so => libs/mips/libtess.so 

Любые идеи приветствуются.

ответ

1

В след от ndk-build вы показываете, я вижу эту линию make.exe: Circular obj/local/mips/libtess.so <- obj/local/mips/libtess.so dependency dropped.

Я думаю, почему у вас нет правильного .so LIB генерируется. Я думаю, вы забыли добавить include $(CLEAR_VARS) до LOCAL_MODULE := receiptrecognizer.

Надеюсь, это будет полезно для вас.

+0

спасибо звуковой! – Heribert

Смежные вопросы