android ndk로 dlib과 opencv를 컴파일하십시오.

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

저는 Android 개발자이지만 Android NDK를 처음 사용합니다. 도움을 요청하거나 필요한 것이 무엇인지 /이 유형의 문제를 해결하기 위해 어떻게 노력하겠습니까?

dlib를 안드로이드 예제와 안드로이드 라이브러리를위한 공식 opencv에 사용 했고 두 어플리케이션을 하나의 어플리케이션에 통합하고 싶습니다. 프로젝트를 만들려고 할 때 다음 오류가 발생합니다.

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. 

내 첫 번째 추측은 안드로이드.mk에 source.cpp를 포함시키지 않았지만 src 파일에 위치 시키면 문제가 해결되지 않는다는 것이었다. 다음은 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) 

어쩌면 NDK_PROJECT_PATH=null 이 문제입니까? 왜 두 도서관이 따로 건축되는 것인가? 아니면 다른 문제가있을 수 있습니까? Android.mk를 많이 수정 해 보았습니다.하지만 작동은 신비입니다. 도움이나 의견이 유용 할 것입니다.

EDIT:

LOCAL_STATIC_LIBRARIES += dlib 행을 주석 처리 할 때 다음 예외가 발생합니다.

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 빌드가 정말로 필요합니까? ARM 장치에서 응용 프로그램을 실행하려면 build.gradle 스크립트에 abiFilters= "armeabi_v7a" 를 추가하십시오.
bendaf 07/30/2017
abi arm64-v8a에서 실행 중이지만 원시 C ++ 코드도 수정 중이므로이 코드도 빌드해야한다고 가정합니다.
Alex Cohn 07/30/2017
LOCAL_STATIC_LIBRARIES += dlib 주석 처리하지 LOCAL_STATIC_LIBRARIES += dlib
bendaf 07/31/2017
내 질문을 편집했습니다. 시간이 있다면 확인해주세요.
1 Alex Cohn 07/31/2017
아니요, NDK_PROJECT_PATH 에 대해 걱정할 필요가 없습니다. Android Studio가 ndk-build 를 통해 기본 빌드를 구성하는 방법입니다. 그러나 dlibcmake 주위에 구조화되어 있으므로 거기에서 사용 된 빌드 설정을 재현해야합니다.

1 Answers


Alex Cohn 07/31/2017.

dlibcmake 사용하며, 사소한 설정은 아닙니다. 경험 전문가가이 라이브러리의 ndk-build 스크립트를 준비하는 데 오랜 시간이 걸릴 수 있습니다.

ndk-build 대신에 cmake 네이티브 라이브러리를 만들 것을 제안합니다. GitHub에서 OpenCv를 사용하는 네이티브 라이브러리의 예를 찾을 수 있습니다.

또한 abiFilters 를 가장 관련성이 높은 ABI로 시작하는 것이 abiFilters 모든 것이 사용자에게 적합하다는 것을 알았을 때만 다른 ABI를위한 프로젝트를 만들 수 있습니다. 일부 라이브러리의 경우 모든 ABI로 포팅하는 것이 까다로울 수 있음을 기억하십시오. 그리고 ABI에 대한 간단한 점검을 수행 할 플랫폼이 없다면, ABI를 구축하는 데는 아무런 의미가 없습니다.

1 comments
bendaf 07/31/2017
고마워, 나는 그것을 시도 할 것이다!

Related questions

Hot questions

Language

Popular Tags