android ndk ile dlib ve opencv derlemek

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

Ben bir Android geliştiricisiyim, ama Android NDK'ya yeni geliyorum, lütfen yardım edin ya da başka neye ihtiyacınız olduğunu söyleyin / bu tür bir sorunu nasıl çözmeyi denersiniz?

Ben android için bu dlib örnek ve android kütüphane için resmi opencv kullandım ve ben bir uygulamada iki entegre etmek istiyorum. Projeyi oluşturmaya çalışırken aşağıdaki hatayı alıyorum:

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. 

Benim ilk tahmin benim android.mk içinde source.cpp dahil / içermedim ama src dosyaları yerleştirmek için bu sivri çözmek değildi vardı. İşte benim 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) 

Belki de NDK_PROJECT_PATH=null problem mi? Neden daha iki kütüphane ayrı inşa ediyor? Ya da sorun başka ne olabilir? Android.mk'yi değiştirmeye çalıştım ama işe yarıyor, benim için bir gizem. Herhangi bir yardım veya fikir faydalı olacaktır.

EDIT:

LOCAL_STATIC_LIBRARIES += dlib satırını LOCAL_STATIC_LIBRARIES += dlib , aşağıdaki özel durum var:

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
MIPS yapısına gerçekten ihtiyacınız var mı? Uygulamanızı ARM cihazlarında çalıştırmayı düşünüyorsanız, build.gradle komut dosyasına abiFilters= "armeabi_v7a" ekleyin.
bendaf 07/30/2017
Abi arm64-v8a üzerinde çalışıyorum ama yerel c ++ kodunu da değiştiriyorum, bu yüzden onu da inşa etmem gerekiyor.
Alex Cohn 07/30/2017
LOCAL_STATIC_LIBRARIES += dlib yorum LOCAL_STATIC_LIBRARIES += dlib
bendaf 07/31/2017
Sorumu düzenledim, zamanınız varsa lütfen kontrol edin
1 Alex Cohn 07/31/2017
Hayır, NDK_PROJECT_PATH hakkında endişelenmenize gerek yok. Bu, Android Studio'nun yerel NDK_PROJECT_PATH ndk-build aracılığıyla nasıl yapılandırdığıdır. Fakat dlib cmake etrafında yapılandırılmıştır, bu yüzden orada kullanılan yapı ayarlarını yeniden dlib .

1 Answers


Alex Cohn 07/31/2017.

dlib cmake kullanır ve önemsiz bir kurulum değildir. Bir deneyim uzmanının bu kitaplık için ndk-build komut dosyalarını hazırlaması uzun zaman alabilir.

Yerli kütüphanenizi ndk-build yerine cmake ile oluşturmanızı öneririm. GitHub'da OpenCv'yi kullanan bir yerel kitaplık örneği bulabilirsiniz.

Ayrıca, yalnızca bir en çok ilgili abiFilters ayarlanmış abiFilters ile abiFilters ve her şeyin sizin için çalıştığını gördüğünüzde, projenizi diğer ABI'lere göre yapılandırabilirsiniz. Tüm ABI'lara giden bazı kütüphanelerin zor olabileceğini unutmayın. Ve eğer bazı ABI için en azından kısa bir akıl kontrolünü yapacak bir platformunuz yoksa, bunun için bir anlam ifade etmiyor.

1 comments
bendaf 07/31/2017
Teşekkürler, bunu deneyeceğim!

Related questions

Hot questions

Language

Popular Tags