à 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!

Je ne suis pas sûr que ce soit une bonne idée. Si vous en construire un, liés statiquement la bibliothèque qui dépend de libstdc++, vous finirez par y compris une copie de ces fonctions dans la bibliothèque. Mais lors du chargement de la bibliothèque sur le téléphone, vous serez charger dans un processus qui a déjà partagé la cartographie de libstdc++ laquelle la demande a hérité quand il était initiés du zygote. C'est, au minimum, de gaspillage. Il pourrait être préférable d'utiliser la mise en drapeau pour permettre aux bibliothèques ont des dépendances non satisfaites?

OriginalL'auteur Greg | 2011-06-22