ndk-build produits " erreur lors de l'ajout de symboles. Fichier en format incorrect’

Je veux utiliser exiv2 bibliothèque écrite en C++ dans mon projet Android. Pour le faire j'ai essayer de cross-compiler la bibliothèque à l'aide de Android NDK.

Pour la cross-compilation-je suivre présenté les étapes ci-dessous:

  1. Ajouter le ndk chemin à CHEMIN de la variable
    $ PATH="/home/patrycja/android-packages/ndk:${PATH}"
    $ export PATH 
  2. Installer le standard de la chaîne de cross-compilation C/C++ pour Android.
    ./make-standalone-toolchain.sh --platform=android-21 --install-dir=/tmp/my-android-toolchain --ndk-dir='/home/patrycja/android-packages/ndk/' --toolchain=arm-linux-androideabi-4.9 --system=linux-x86_64
    
    Copying prebuilt binaries...
    Copying sysroot headers and libraries...
    Copying c++ runtime headers and libraries...
    Copying files to: /tmp/my-android-toolchain
    Cleaning up...
    Done.
  3. Définir certaines variables d'environnement ainsi que la configuration et le processus de création d'utiliser le bon compilateur.
    $ export PATH=/tmp/my-android-toolchain/bin:$PATH
    $ export CC="arm-linux-androideabi-gcc"
    $ export CXX="arm-linux-androideabi-g++"
    $ export CFLAGS='-mthumb -O2' 
    $ export CXXFLAGS='-mthumb -O2' 
    $ export LDFLAGS='-Wl,--fix-cortex-a8' 
    $ export LIBS='-lstdc++ -lsupc++' 
  4. Bulid la bibliothèque statique et suffisante en-têtes
    ./configure --prefix=$(pwd)/build --host=arm-linux-androideabi --disable-shared --disable-xmp --disable-nls

Résultat: j'ai créé la "construction" de la catégorie fichiers:

    ├── bin
       └── exiv2
    ├── include
       └── exiv2
           ├── *.hpp
    
    ├── lib
       ├── libexiv2.a
       ├── libexiv2.la
       └── pkgconfig
           └── exiv2.pc
    └── share
        └── man
            └── man1
                └── exiv2.1

J'ai copié créé bibliothèque statique libexiv2.a et include dossier de mon projet Android dans appName/src/main/jni/prebuild.

Android.mk ressemble:

LOCAL_PATH := $(call my-dir)

#static library info
LOCAL_MODULE := exiv2
LOCAL_SRC_FILES := ../prebuild/libexiv2.a
LOCAL_EXPORT_C_INCLUDES := ../prebuild/include/
LOCAL_EXPORT_LDLIBS := -lz
include $(PREBUILT_STATIC_LIBRARY)


#wrapper info
include $(CLEAR_VARS)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../prebuild/include/
LOCAL_MODULE    := helloJNI
LOCAL_SRC_FILES := helloJNI.cpp
LOCAL_STATIC_LIBRARIES := exiv2
include $(BUILD_SHARED_LIBRARY)

Dans mon wrapper Android, et j'essaie d'utiliser la bibliothèque. Il semble comme suit:

#include <string.h>
#include <jni.h>
#include <exiv2/exiv2.hpp>

extern "C" {

JNIEXPORT jstring JNICALL Java_com_example_patrycja_testndi2_MyActivity_helloJNI(JNIEnv *env, jobject thiz)
    {
        std::ostringstream os;
        std::string file("/storage/emmc/DCIM/100MEDIA/IMAG0021.jpg");
        Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(file);
        return env->NewStringUTF("asldjaljd");
    } 
}

Cependant ndk-build sorties qu'il ne peut pas le trouver.

[arm64-v8a] Compile++      : helloJNI &lt;= helloJNI.cpp
[arm64-v8a] SharedLibrary  : libhelloJNI.so
jni/../prebuild/libexiv2.a: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
make: *** [obj/local/arm64-v8a/libhelloJNI.so] Error 1

Je crois qu'il y a quelque chose de mal avec des drapeaux de compilation croisée. J'ai essayé plusieurs options, mais quelque chose est toujours mal.
J'ai suivi ces instructions: https://groups.google.com/forum/#!topic/android-ndk/mYh1LzMu_0U

OriginalL'auteur rocksparrow | 2015-06-04