google :: protobuf usado en android ndk desarrollar

Recientemente he intentado mover alguna función de predicción del modelo Caffe (c ++) a la plataforma Android (nivel ndk) este es el enlace: Y este modelo necesita soporte de OpenCV / OpenCV2 y google :: protobuf . Tengo incluir todas las lib (.a) necesarias de OpenCV en el Android.mk para compilar en .so lib proporcionado para el java como abajo (en Android.mk ):

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) 

Luego compilar el google :: protobuf-2.5.0 con el android-ndk-r11c en ubuntu14.04 para obtener tres librerías estáticas (libprotobuf.a, libprotobuf-lite.a, libprotoc.a), aquí está todo el script de 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 

y la biblioteca de tres utilizado para apoyar el módulo Opencv2 / dnn como este (también en el 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) 

pero el problema viene cuando ndk-construir el android.mk para obtener el 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) 

$ NDK | ndk-build cumple el error de std

el problema parece carecer de alguna parte de stl-library, pero en build_library.sh: CXXFLAGS = "- march = armv7-a -I $ CXXSTL / include -I $ CXXSTL / libs / armeabi-v7a / include -L $ CXXSTL / libs / armeabi-v7a / -lgnustl_static "

Tengo include gnu_stl static y en el mismo directorio de android.mk, el Application.mk es también el estado de gnustl:

 APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi-v7a APP_PLATFORM := android-15 

Realmente espero que alguien me pueda dar algunos consejos sobre esta situación.

Probablemente usted sabe, pero hay un puerto específico de android-caffe, con ejemplos:

biblioteca: https://github.com/sh1r0/caffe-android-lib

En caffe / android carpeta hay JNI envoltorio y caffe_mobile archivos

Ejemplo:

https://github.com/sh1r0/caffe-android-demo

Utiliza el nivel de API nativo de android-21, y no admite algunas bibliotecas io como (leveldb, lmdb y hdf5, sólo cpu).

La biblioteca tiene muchos scripts para descargar todas las dependencias 3rparty (protobuf, gflags, eigem, openblas,). Eigen3 se define de forma predeterminada, pero sólo puede utilizar openblas_library para procesadores de brazo.

Tengo el problema similar, pero en mi caso mi problema de la biblioteca del stl viene cuando estoy intentando ligar mi propia biblioteca del envoltorio de .so usando las herramientas de cross-compiling de cmake. gnustl_static no funciona y falla en la vinculación de biblioteca de impulso.

 directory_iterator_increment(boost::filesystem::directory_iterator&, boost::system::error_code*): error: undefined reference to 'stpcpy' 

de todos modos, espero que estas referencias ayuden a resolver la solución.

Aclamaciones

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.