J'essaie de créer une application Android qui utilise des bibliothèques statiques à partir d'un code c++ existant. Cependant, je ne parviens pas à construire les choses, voici les étapes que j'ai suivies jusqu'à présent
J'ai ndk-r5b et j'ai construit la chaîne d'outils autonome selon ndk/docs/STANDALINE-TOOLCHAIN.html. J'ai ensuite utilisé le compilateur de la chaîne d'outils autonome (arm-linux-androideabi-g++) au lieu de g++ pour le drapeau CXX dans le Makefile qui compile les bibliothèques statiques dont j'ai besoin. La compilation s'est faite sans erreur et il y a 3 bibliothèques statiques produites. Voici un extrait de code de certains des drapeaux utilisés pour construire les bibliothèques pré-construites :
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 par le 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
Ensuite, je construis l'application en utilisant ndk-build en utilisant ce qui suit 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éconstruites se compilent bien en utilisant le compilateur de la chaîne d'outils autonome fourni dans le kit de développement Android. Cependant, il y a de nombreuses références non résolues à ostream lorsque l'on lie la bibliothèque partagée aux bibliothèques préconstruites en utilisant ndk-build. Par exemple :
/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 qu'il me manque des drapeaux importants ou que je ne fais pas quelque chose de correct lorsque je compile en utilisant le compilateur autonome, mais toute aide ou idée sur ce problème serait grandement appréciée car je ne semble pas trouver cette réponse sur Google ou dans l'une des docs Android ndk. Merci !