2011-11-29 3 views
0

J'essaye d'inclure la bibliothèque statique de cpp dans android. Cette bibliothèque est déjà compilée (sur mac os) et j'ai ses fichiers include.Erreur dans la liaison bibliothèque C++ statique avec android ndk (Erreur: format de fichier non reconnu)

Voici mon fichier Android.mk

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
    include $(CLEAR_VARS) 
    LOCAL_MODULE:= utils 
    LOCAL_SRC_FILES:= libUtils.a 
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/utils 
    include $(PREBUILT_STATIC_LIBRARY) 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := sample 
    LOCAL_SRC_FILES := sample_cpp.cpp 
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 
    LOCAL_STATIC_LIBRARIES := utils 
    LOCAL_LDLIBS := -llog 
    include $(BUILD_SHARED_LIBRARY) 

et voici Application.mk fichier

APP_STL := stlport_static 
APP_CPPFLAGS = -fexceptions 

mais chaque fois qu'il essaie de le compiler en utilisant NDK i obtenir l'erreur

(Chemin du fichier) /libUtils.a: fichier non reconnu: format de fichier non reconnu collect2: ld a renvoyé 1 sortie état

+0

pouvez-vous fournir la sortie de 'file libUtils.a'? – plaisthos

+0

désolé mais je ne peux pas vous obtenir? sortie? –

+0

Votre bibliothèque a-t-elle été compilée pour Android? Si la bibliothèque contient du code pour un autre type de processeur (jeu d'instructions), cela ne fonctionnera pas! –

Répondre

5

À partir des commentaires, il semble que vous essayiez d'utiliser une version non-armée de la bibliothèque. Vous devriez construire la bibliothèque avec le ndk. La documentation a même une documentation sur la façon de le faire.

Par exemple la construction sigC++ pourrait être comme (d'un projet de la mine, où sigC++ réside dans le sous-répertoire sigC++)

# SIGC++ Library built as static library 
LOCAL_MODULE := sigc 
LOCAL_PATH = $(CURRENT_DIR) 
LOCAL_CPP_EXTENSION := .cc 

LOCAL_SRC_FILES := sigc++/signal.cc  sigc++/signal_base.cc sigc++/trackable.cc 
LOCAL_SRC_FILES += sigc++/functors/slot_base.cc sigc++/adaptors/lambda/lambda.cc 
LOCAL_SRC_FILES += sigc++/connection.cc sigc++/functors/slot.cc 

LOCAL_C_INCLUDES := sigc++ 

include $(BUILD_STATIC_LIBRARY) 

Mais vous devriez lire vraiment comment la compilation des œuvres liant. J'ai peur de construire pour Android avec ndk est plus bas niveau que d'utiliser Xcode ou Msvc.

+0

+1 mec pour explication. laisse-moi voir la doccumentation. puis essayez de le compiler. –

Questions connexes