à l'aide de pré-construit des bibliothèques statiques pour Android NDK développement
Je suis en train de construire une application android qui utilise les bibliothèques statiques à partir de certains de code c++. Cependant, je n'arrive pas à obtenir des choses de construction, voici les étapes que j'ai prises jusqu'à présent..
J'ai ndk-r5b et ont construit la version autonome de l'ensemble des outils comme par ndk/docs/STANDALINE-TOOLCHAIN.html. J'ai ensuite utilisé la version autonome de la chaîne d'compilateur (arm-linux-androideabi-g++) au lieu de g++ pour le CXX drapeau dans le Makefile qui compile les bibliothèques statiques dont j'ai besoin. Cette compile sans erreurs et il y a 3 bibliothèques statiques produit.
Voici un extrait de code de certains des indicateurs utilisés pour construire les bibliothèques prêtes à l'emploi:
CXX = arm-linux-androideabi-g++
SYSTEM_LIBS = -lstdc++ -lm
INCLUDE_PATH += ${NDK_PATH}/platforms/android-8/arch-arm/usr/include/
Voici un exemple de ligne qui est produite à partir du makefile lors de la compilation:
arm-linux-androideabi-g++ -c -DTIME_SIM -I./include -I/home/greg/dev/Android/android-ndk-r5b/platforms/android-8/arch-arm/usr/include/ -fpic -ggdb3 -SimTime.C -o SimTime.o
Prochaine je construire l'application à l'aide de ndk-build en utilisant les éléments suivants pour Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := engine
LOCAL_SRC_FILES := ../libs/libEngine.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := shmem
LOCAL_SRC_FILES := ../libs/libShMem.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := util
LOCAL_SRC_FILES := ../libs/libUtil.a
include $(PREBUILT_STATIC_LIBRARY)
# build server as a shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libServer
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../include
LOCAL_SRC_FILES := \
Server.C \
Router.C \
RouterMsgs.C \
Federation.C \
cripName.C \
ver.C \
JNIWrapper.cpp
LOCAL_STATIC_LIBRARIES := engine shmem util
include $(BUILD_SHARED_LIBRARY)
Les bibliothèques prêtes à l'emploi compiler fine à l'aide de l'application autonome de la chaîne d'compilateur donné dans l'android ndk. Cependant il y a beaucoup de suspens références à ostream lors de la liaison de la bibliothèque partagée pour les bibliothèques prêtes à l'emploi à l'aide de ndk-build. Pour exampe:
/home/android/obj/local/armeabi/libShMem.a(SubscriptionItem.o): In function `SUBSCRIPTION_ITEM::Print(std::basic_ostream<char, std::char_traits<char> >&)':/home/src/comm/SubscriptionItem.C:97: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
Je suppose que je suis absent de certaines de drapeaux ou de ne pas faire quelque chose de correct quand je suis à la compilation à l'aide de l'application autonome du compilateur mais toute aide ou des connaissances sur cette question serait grandement apprécié que je ne peux pas l'air de trouver cette réponse sur google ou dans l'un des android ndk docs. Merci!
OriginalL'auteur Greg | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
Bien, vous pouvez le corriger avec la création d'un Application.mk fichier dans le même dossier que le Android.mk fichier, contenant:
pour l'utilisation de la statique stlport qui est situé à l'intérieur de l'Android NDK.
OriginalL'auteur Christoph Martens
J'ai eu le même problème et l'a résolu par l'ajout d'un module de la bibliothèque C++ standard. La bibliothèque liée par le ndk-construire le système à partir de l'emplacement incorrect (plates-formes/android-9/arch-bras/usr/lib dans mon cas).
Ajouter le module tag à la liste des bibliothèques statiques:
La
build/core/build-binary.mk
ajoute-L$(SYSROOT)/usr/lib
si les bibliothèques sont spécifiés dans LOCAL_LDLIBS mais dans mon cas, c'est le mauvais chemin.Je ne sais pas si il manque une étape à une copie du bon libstdc++ à cet emplacement, mais la démarche ci-dessus va travailler.
OriginalL'auteur Kevin Beck