Недавно я пытаюсь переместить некоторые предсказать функцию модели Caffe (C++) для Android платформы (уровень NDK) this is the link: И эта модель нуждается в поддержке OpenCV/OpenCV2 и Google :: protobuf. меня включают в себя все необходимое LIB (.a) из OpenCV в Android.mk для компиляции в .so Lib, предусмотренной для Java, как показано ниже (в Android.mk):Google :: Protobuf используется в андроиде НКА разработки
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_features2d
LOCAL_SRC_FILES := libopencv_features2d.a
LOCAL_EXPORT_C_INCLUDES := /home/wm/Downloads/OpenCV-android-sdk/sdk/native/jni/include
include $(PREBUILT_STATIC_LIBRARY)
ТОГДА Я компилирую Устройство Google :: Protobuf-2.5.0 с андроид-NDK-r11c в ubuntu14.04, чтобы получить три статическую библиотеку (libprotobuf.a, libprotobuf-lite.a, libprotoc.a), вот все сценарий build_library.sh:
#!/bin/bash
export NDK=/home/wm/Downloads/android-ndk-r11c
export SYSROOT=$NDK/platforms/android-15/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/
export PATH=$PATH:$TOOLCHAIN/bin
#export CC="arm-linux-androideabi-gcc --sysroot $SYSROOT"
export CXX="arm-linux-androideabi-g++ --sysroot $SYSROOT"
export CXXSTL=$NDK/sources/cxx-stl/gnu-libstdc++/4.9
function build_one
{
mkdir build
./configure --prefix=$(pwd)/build \
--host=arm-linux-androideabi \
--with-sysroot=$SYSROOT \
--enable-static \
--disable-shared \
--enable-cross-compile \
--with-protoc=protoc LIBS="-lc-lstdc++" \
# CFLAGS="-march=armv7-a" \
CXXFLAGS="-march=armv7-a -I$CXXSTL/include -I$CXXSTL/libs/armeabi-v7a/include -L$CXXSTL/libs/armeabi-v7a/ -lgnustl_static"
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
# Inspect the library architecture specific information
# arm-linux-androideabi-readelf -A build/lib/libprotobuf-lite.a
и три библиотеки используются для поддержки модуля Opencv2/Dnn как это (аль поэтому в Android.mk):
include $(CLEAR_VARS)
LOCAL_MODULE := google_protobuf
LOCAL_SRC_FILES := libprotobuf.a
LOCAL_EXPORT_C_INCLUDES := $(call my-dir)/sources/protobuf-2.5.0/build/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := google_protobuflite
LOCAL_SRC_FILES := libprotobuf-lite.a
LOCAL_EXPORT_C_INCLUDES := $(call my-dir)/sources/protobuf-2.5.0/build/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := google_protoc
LOCAL_SRC_FILES := libprotoc.a
LOCAL_EXPORT_C_INCLUDES := $(call my-dir)/sources/protobuf-2.5.0/build/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_dnn
LOCAL_SRC_FILES := libopencv_dnn.a
LOCAL_STATIC_LIBRARIES := google_protobuf google_protoc google_protobuflite
LOCAL_EXPORT_C_INCLUDES := /home/wm/Downloads/OpenCV-android-sdk/sdk/native/jni/include
include $(PREBUILT_STATIC_LIBRARY)
, но проблема возникает, когда я НДК-строить android.mk получить MyLib.so:
LOCAL_MODULE := MyLib
LOCAL_C_INCLUDES :=/home/wm/Downloads/OpenCV-android-sdk/sdk/native/jni/include/opencv
LOCAL_C_INCLUDES +=/home/wm/Downloads/OpenCV-android-sdk/sdk/native/jni/include
LOCAL_SRC_FILES := com_example_alexandroskarargyris_myapplication_NativeClass.cpp
LOCAL_STATIC_LIBRARIES := opencv_dnn opencv_xphoto opencv_xobjdetect opencv_ximgproc opencv_xfeatures2d opencv_videostab opencv_videoio opencv_video opencv_ts opencv_line_descriptor
LOCAL_STATIC_LIBRARIES += opencv_tracking opencv_text opencv_surface_matching opencv_superres opencv_structured_light opencv_aruco opencv_bgsegm opencv_bioinspired opencv_imgproc
LOCAL_STATIC_LIBRARIES += opencv_calib3d opencv_ccalib opencv_core opencv_datasets opencv_dpm opencv_face opencv_features2d opencv_flann opencv_hal opencv_highgui opencv_imgcodecs opencv_ml
LOCAL_STATIC_LIBRARIES += opencv_objdetect opencv_optflow opencv_photo opencv_reg opencv_rgbd opencv_saliency opencv_shape opencv_stereo opencv_stitching
LOCAL_STATIC_LIBRARIES += libjpeg libwebp libpng libtiff libjasper IlmImf tbb
LOCAL_LDLIBS += -llog -lz -ldl -lm **-lstdc++**
include $(BUILD_SHARED_LIBRARY)
проблема, кажется, не хватает какой-то части СТЛ-библиотеки, но в build_library.sh: CXXFLAGS = "- марш = ARMv7-а -I $ CXXSTL/включают -I $ CXXSTL/LIBS/armeabi-v7a/включают -L $ CXXSTL/ЛИЭС/а rmeabi-v7a/-lgnustl_static»
меня включают gnu_stl статические и в том же каталоге android.mk, то Application.mk также указать gnustl:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-15
Я действительно надеюсь, что кто-то может дайте мне совет об этой ситуации.