kääntää dlib ja opencv kanssa android ndk

bendaf 07/28/2017. 1 answers, 101 views
android android build android-ndk android-ndk dlib android-studio-2.3

Olen Android-kehittäjä, mutta olen uusi Android NDK: lle, auta tai kerro mitä muuta tarvitset / miten yrität ratkaista tämän tyyppistä ongelmaa.

Käytin tätä dlib for android esimerkki ja virallinen opencv for android kirjasto ja haluaisin liittää kaksi yhdeksi sovellukseksi. Kun yritän rakentaa projektia, saan seuraavan virheen:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':openCVSamplefacedetection:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process /home/feli/Android/Sdk/ndk-bundle/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/Android.mk NDK_APPLICATION_MK=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/Application.mk APP_ABI=mips64 NDK_ALL_ABIS=mips64 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/lib /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj/local/mips64/libdetection_based_tracker.so}
  [mips64] Compile++      : detection_based_tracker <= DetectionBasedTracker_jni.cpp
  [mips64] Prebuilt       : libopencv_java3.so <= /home/feli/Android/openCV/OpenCV-android-sdk/sdk/native/jni/../libs/mips64/
  [mips64] SharedLibrary  : libdetection_based_tracker.so
  /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj/local/mips64/objs-debug/detection_based_tracker/DetectionBasedTracker_jni.o: In function `dlib_check_consistent_assert_usage':
  /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/dlib/dlib/threads/threads_kernel_shared.h:44: undefined reference to `USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  make: *** [/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj/local/mips64/libdetection_based_tracker.so] Error 1


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

Ensimmäinen arvausani oli, että en ole sisällyttänyt source.cpp -ohjelmaa Android.mk-palveluun, mutta paikantaminen src-tiedostoihin ei ratkaise ongelmaa. Tässä on Android.mk:

LOCAL_PATH := $(call my-dir)

## Build dlib to static library
include $(CLEAR_VARS)
LOCAL_MODULE := dlib
LOCAL_C_INCLUDES := $(LOCAL_PATH)/dlib

LOCAL_SRC_FILES += \
                $(LOCAL_PATH)/dlib/dlib/all/source.cpp \
                $(LOCAL_PATH)/dlib//dlib/threads/threads_kernel_shared.cpp \
                $(LOCAL_PATH)/dlib/dlib/entropy_decoder/entropy_decoder_kernel_2.cpp \
                $(LOCAL_PATH)/dlib/dlib/base64/base64_kernel_1.cpp \
                $(LOCAL_PATH)/dlib/dlib/threads/threads_kernel_1.cpp \
                $(LOCAL_PATH)/dlib/dlib/threads/threads_kernel_2.cpp

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
include $(BUILD_STATIC_LIBRARY)

# Build opencv
include $(CLEAR_VARS)
OPENCVROOT := ~/Android/openCV/OpenCV-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE := SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_MODULE     := detection_based_tracker
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp

LOCAL_LDLIBS     += -lm -llog -ldl -lz -ljnigraphics
LOCAL_CPPFLAGS += -fexceptions -frtti -std=c++11

# LOCAL_STATIC_LIBRARIES += dlib

include $(BUILD_SHARED_LIBRARY) 

Ehkä NDK_PROJECT_PATH=null on ongelma? Miksi kaksi kirjastoa rakennetaan erikseen? Tai mikä muu voi olla ongelma? Olen yrittänyt paljon muokata Android.mk, mutta se toimii on mysteeri minulle. Kaikki apu tai lausunto olisi hyödyllinen.

EDIT:

Kun kommentoin LOCAL_STATIC_LIBRARIES += dlib riviä, minulla on seuraava poikkeus:

Build command failed.
  Error while executing process /home/feli/Android/Sdk/ndk-bundle/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/Android.mk NDK_APPLICATION_MK=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/Application.mk APP_ABI=mips64 NDK_ALL_ABIS=mips64 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/lib /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj/local/mips64/libdetection_based_tracker.so}
  [mips64] Compile++      : detection_based_tracker <= DetectionBasedTracker_jni.cpp
  [mips64] Compile++      : dlib <= source.cpp
  In file included from /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/dlib/dlib/all/source.cpp:76:
  In file included from /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/dlib/dlib/all/../gui_widgets/fonts.cpp:14:
  /home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/dlib/dlib/all/../gui_widgets/nativefont.h:27:10: fatal error: 'X11/Xlib.h' file not found
  #include            ^~~~~~~~~~~~
  1 error generated.
  make: *** [/home/feli/Development/android/test/face-detection/openCVSamplefacedetection/build/intermediates/ndkBuild/debug/obj/local/mips64/objs-debug/dlib//home/feli/Development/android/test/face-detection/openCVSamplefacedetection/src/main/jni/dlib/dlib/all/source.o] Error 1 
5 Comments
Alex Cohn 07/28/2017
Tarvitsetko todella MIPS-rakennetta? Jos aiot käyttää sovellustasi ARM-laitteissa, lisää abiFilters= "armeabi_v7a" build.gradle -komentosiin.
bendaf 07/30/2017
Olen käynnissä abi arm64-v8a, mutta olen muokkaamalla natiivi c + + koodi myös, joten luulen, että minun täytyy rakentaa sitä myös.
Alex Cohn 07/30/2017
Et saa kommentoida LOCAL_STATIC_LIBRARIES += dlib
bendaf 07/31/2017
Olen muokannut kysymykseni, tarkista, jos sinulla on aikaa
1 Alex Cohn 07/31/2017
Ei, sinun ei pidä huolehtia NDK_PROJECT_PATH , joten Android Studio määrittää natiivirakennuksen ndk-build . Mutta dlib on jäsennelty noin cmake , joten pitäisi toistaa rakentaa asetuksia siellä.

1 Answers


Alex Cohn 07/31/2017.

dlib käyttää cmake , eikä se ole vähäpätöinen asennus. Saattaa kestää kauan, kun ammattikokemus valmistaa tämän kirjaston ndk-build skriptit.

Ehdotan, että rakentaisit natiivikirjastosi cmake , eikä ndk-build . Löydät esimerkin natiivi kirjastosta, joka käyttää OpenCv : tä GitHubissa .

Ehdotan myös, että aloitat abiFilters asetuksilla vain yhdeksi tärkeimmäksi ABI: ksi, ja vain kun näet, että kaikki toimii sinulle, voit rakentaa projektisi muille ABI: lle. Muista, että joillekin ABI: eille siirrettävistä kirjastoista voi olla hankalaa. Ja jos sinulla ei ole foorumi tehdä vähintään lyhyt kunnon tarkistaa joitakin ABI, ei ole mitään järkeä rakentaa sitä.

1 comments
bendaf 07/31/2017
Kiitos, yritän sitä!

Related questions

Hot questions

Language

Popular Tags