с использованием предварительно созданных статических библиотек для разработки Android NDK

Я пытаюсь создать приложение для 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

Затем я создаю приложение с помощью 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)

Предварительно созданные библиотеки отлично компилируются с использованием автономного компилятора инструментальной цепочки, указанного в ndk android. Однако есть много неразрешенных ссылок на 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 или в любом из документов ndk android. Спасибо!

8
задан Greg 22 June 2011 в 07:36
поделиться