kompilasi dlib dan buka dengan ndk android

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

Saya adalah pengembang Android, tetapi saya baru di Android NDK, tolong bantu, atau beri tahu saya apa lagi yang Anda perlukan / bagaimana Anda akan mencoba memecahkan masalah seperti ini.

Saya menggunakan dlib ini untuk contoh android dan opencv resmi untuk pustaka android dan saya ingin mengintegrasikan keduanya dalam satu aplikasi. Ketika saya mencoba untuk membangun proyek, saya mendapatkan kesalahan berikut:

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. 

Tebakan pertama saya adalah bahwa saya tidak menyertakan source.cpp di Android.mk saya tetapi menempatkannya ke file src tidak memecahkan porblem. Inilah Android.mk saya:

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) 

Mungkin NDK_PROJECT_PATH=null adalah masalahnya? Lalu mengapa kedua perpustakaan itu dibangun secara terpisah? Atau apa lagi masalahnya? Saya mencoba banyak memodifikasi Android.mk, tetapi berfungsi adalah misteri bagi saya. Setiap bantuan atau pendapat akan bermanfaat.

EDIT:

Ketika saya mengomentari LOCAL_STATIC_LIBRARIES += dlib baris, saya mendapat pengecualian sebagai berikut:

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
Apakah Anda benar-benar membutuhkan MIPS build? Jika Anda ingin menjalankan aplikasi di perangkat ARM, tambahkan abiFilters= "armeabi_v7a" ke skrip build.gradle Anda.
bendaf 07/30/2017
Saya menjalankan abi arm64-v8a, tetapi saya memodifikasi kode native c ++ juga, jadi saya kira saya harus membuatnya juga.
Alex Cohn 07/30/2017
Anda tidak perlu memberi komentar LOCAL_STATIC_LIBRARIES += dlib
bendaf 07/31/2017
Saya telah mengedit pertanyaan saya, silakan periksa jika Anda punya waktu
1 Alex Cohn 07/31/2017
Tidak, Anda tidak perlu khawatir tentang NDK_PROJECT_PATH , begitulah Android Studio mengonfigurasi bangunan asli melalui ndk-build . Tapi dlib terstruktur sekitar cmake , jadi harus mereproduksi pengaturan build yang digunakan di sana.

1 Answers


Alex Cohn 07/31/2017.

dlib menggunakan cmake , dan itu bukan pengaturan sepele. Mungkin butuh waktu lama bagi profesional berpengalaman untuk menyiapkan skrip ndk-build untuk pustaka ini.

Saya menyarankan agar Anda membangun perpustakaan asli Anda dengan cmake , bukan ndk-build . Anda dapat menemukan contoh pustaka asli yang menggunakan OpenCv di GitHub .

Juga, saya sarankan Anda memulai dengan abiFilters diatur hanya satu ABI yang paling relevan, dan hanya ketika Anda melihat bahwa semuanya bekerja untuk Anda, Anda dapat membangun proyek Anda untuk ABI lainnya. Ingat bahwa untuk beberapa perpustakaan porting ke semua ABI mungkin sulit. Dan jika Anda tidak memiliki platform untuk melakukan setidaknya pemeriksaan kewarasan singkat untuk beberapa ABI, tidak ada gunanya membangun untuk itu.

1 comments
bendaf 07/31/2017
Terima kasih, saya akan mencobanya!

Related questions

Hot questions

Language

Popular Tags