Я пытаюсь создать приложение для Android, которое использует статические библиотеки из некоторого существующего кода C ++.Однако я не могу добиться успеха, вот шаги, которые я предпринял до сих пор.
У меня есть ndk-r5b и я построил автономный набор инструментов согласно ndk / docs / STANDALINE-TOOLCHAIN.html.Затем я использовал автономный компилятор цепочки инструментов (arm-linux-androideabi-g ++) вместо g ++ для флага CXX в Makefile, который компилирует нужные мне статические библиотеки.Компилируется без ошибок, и создаются 3 статические библиотеки.Вот фрагмент кода некоторых флагов, использованных для сборки предварительно собранных библиотек:
CXX = arm-linux-androideabi-g++
SYSTEM_LIBS = -lstdc++ -lm
INCLUDE_PATH += ${NDK_PATH}/platforms/android-8/arch-arm/usr/include/
Вот пример строки, которая создается из make-файла при компиляции:
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
NextЯ создаю приложение, используя ndk-build, используя следующее для 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)
Предварительно собранные библиотеки прекрасно компилируются с помощью автономного компилятора цепочки инструментов, приведенного в Android ndk.Однако существует много неразрешенных ссылок на ostream при связывании разделяемой библиотеки с готовыми библиотеками с помощью ndk-build.Например:
/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*)'
Я предполагаю, что пропускаю некоторые важные флаги или неправильно что-то делаю при компиляции с использованием автономного компилятора, но любая помощь или понимание по этому вопросу будет высоко оценено, так как я не могунайти этот ответ в Google или в любом из документов Android ndk.Спасибо!