biên dịch dlib và opencv với android ndk

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

Tôi là một nhà phát triển Android nhưng tôi mới sử dụng NDK của Android, hãy trợ giúp hoặc cho tôi biết bạn cần gì khác / bạn sẽ cố gắng giải quyết loại vấn đề này như thế nào.

Tôi đã sử dụng dlib này cho ví dụ android và opencv chính thức cho thư viện android và tôi muốn tích hợp cả hai trong một ứng dụng. Khi tôi cố gắng xây dựng dự án, tôi nhận được lỗi sau:

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. 

Đoán đầu tiên của tôi là tôi đã / t bao gồm các source.cpp trong Android.mk của tôi nhưng đặt nó vào các tập tin src đã không giải quyết các porblem. Đây là Android.mk của tôi:

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) 

Có lẽ NDK_PROJECT_PATH=null là vấn đề? Hơn lý do tại sao hai thư viện được xây dựng riêng biệt? Hoặc những gì khác có thể là vấn đề? Tôi đã thử rất nhiều thay đổi Android.mk, nhưng nó hoạt động là một bí ẩn đối với tôi. Bất kỳ trợ giúp hoặc ý kiến ​​nào đều hữu ích.

EDIT:

Khi tôi nhận xét hàng LOCAL_STATIC_LIBRARIES += dlib , tôi nhận được ngoại lệ sau:

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 28/07/2017
Bạn có thực sự cần xây dựng MIPS không? Nếu bạn định chạy ứng dụng của mình trên thiết bị ARM, hãy thêm abiFilters= "armeabi_v7a" vào tập lệnh build.gradle của bạn.
bendaf 30/07/2017
Tôi đang chạy trên abi arm64-v8a, nhưng tôi cũng đang sửa đổi mã c ++ gốc, vì vậy tôi cho rằng tôi cũng cần phải xây dựng nó.
Alex Cohn 30/07/2017
Bạn không nên nhận xét LOCAL_STATIC_LIBRARIES += dlib
bendaf 31/07/2017
Tôi đã chỉnh sửa câu hỏi của mình, vui lòng kiểm tra câu hỏi nếu bạn có thời gian
1 Alex Cohn 31/07/2017
Không, bạn không nên lo lắng về NDK_PROJECT_PATH , đó là cách Android Studio định cấu hình bản dựng gốc thông qua ndk-build . Nhưng dlib được cấu trúc xung quanh cmake , vì vậy nên tái tạo các cài đặt xây dựng được sử dụng ở đó.

1 Answers


Alex Cohn 31/07/2017.

dlib sử dụng cmake , và nó không phải là một thiết lập tầm thường. Có thể mất một thời gian dài để một chuyên gia có kinh nghiệm chuẩn bị các kịch bản lệnh ndk-build cho thư viện này.

Tôi đề nghị bạn xây dựng thư viện riêng của bạn với cmake , thay vì ndk-build . Bạn có thể tìm thấy ví dụ về thư viện gốc sử dụng OpenCv trên GitHub .

Ngoài ra, tôi khuyên bạn nên bắt đầu với abiFilters được đặt thành chỉ một ABI có liên quan nhất, và chỉ khi bạn thấy mọi thứ hoạt động cho bạn, bạn có thể xây dựng dự án của mình cho các ABI khác. Hãy nhớ rằng đối với một số thư viện chuyển đến tất cả các ABI có thể phức tạp. Và nếu bạn không có một nền tảng để thực hiện ít nhất một kiểm tra sanity ngắn gọn cho một số ABI, không có ý nghĩa trong việc xây dựng cho nó.

1 comments
bendaf 31/07/2017
Cảm ơn, tôi sẽ cố gắng!

Related questions

Hot questions

Language

Popular Tags