2014-12-03 1 views
0

Я построил casablanca для Android в соответствии с инструкциями здесь: How to build and setup for Android on Linux (2.3+).Ошибки Linkaber Casablanca на Android

Я переместил скомпилированные библиотеки в свой проект Android и связал модуль, который зависит от casablanca в соответствии с инструкциями здесь: How to use the C++ REST SDK on Android (2.3+).

Однако я получаю несколько ошибок компоновщика.

Например, при попытке использовать

json::value::string("some value"); 

я,

error: undefined reference to 'web::json::value::string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)' 

И при попытке использовать

json::value version; 
version[someValue] = something; 

я,

error: undefined reference to 'web::json::value::operator[](std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)' 

Я комментирую свой Android-проект с clang.

Я построил на виртуальной машине Linux-64, а мой Android-проект находится на машине под Windows-64. Однако, пытаясь создать общую библиотеку casablanca для Android на Linux, я также получил несколько ошибок компоновщика.

Я подозреваю, что есть некоторый код, скомпилированный с libstdC++, а некоторые с libC++. От взгляда на скрипты сборки я вижу, что clang используется как для boost, так и для casablanca, но я также вижу include paths, указывающие на gcc-заголовки. Мне также любопытно, почему я вижу на выходе компоновщика (в Windows) ссылки на /sources/cxx-stl/gnu-libstdc++/4.8/include/ с моим линией Linux VM.

Любые идеи о том, как правильно установить связь с Касабланкой на Android, будут оценены.

Спасибо.

(я вывесил этот же вопрос here.)

+0

Я избавился от ошибок компоновщика ... Я скоро отправлю решение ... – Luis

ответ

0

На самом деле в конечном итоге компиляции кода проекта с libstdC++ (gnustl_shared).

0

Оказывается, что Casablanca должен быть связан с libstdC++ но я использую лязг для проекта.

Таким образом, я внесла следующие изменения, чтобы связать мой модуль проекта с casablanca.

Я изменил APP_STL из C++ _ статический для C++ _ общий в Application.mk.

Кроме того, на файл Android.mk где у меня есть модули зависимостей я добавил следующее:

#GNU STL 
#Note: this is the GNU STL static library used by casablanca 
include $(CLEAR_VARS) 
LOCAL_MODULE := gnustl 
LOCAL_SRC_FILES := ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/$(TARGET_ARCH_ABI)/libgnustl_static.a 
include $(PREBUILT_STATIC_LIBRARY) 

#Casablance prebuilt 
#Note: These are the includes that casablanca uses. 
include $(CLEAR_VARS) 
LOCAL_MODULE := casablanca 
LOCAL_SRC_FILES := $(LOCAL_PATH)/$(TARGET_ARCH_ABI)/libcpprest.a 
LOCAL_EXPORT_C_INCLUDES := ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include \ 
          ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/$(TARGET_ARCH_ABI)/include \ 
          ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include/backward 
LOCAL_WHOLE_STATIC_LIBRARIES := gnustl 
include $(PREBUILT_STATIC_LIBRARY) 

Кроме того, я могу добавить следующее в Android.тк для модуля зависит от Касабланке (так как она зависит от системы регистрации библиотеки):

LOCAL_LDLIBS := -llog