Касабланка Линкер Ошибки на Android

Я построил casablanca для Android в соответствии с инструкциями здесь: Как собрать и настроить Android на Linux (2.3+).

Я переместил скомпилированные библиотеки в свой проект Android и связал модуль, который зависит от casablanca, согласно инструкциям здесь: Как использовать C ++ REST SDK на 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, но я также вижу пути, указывающие на заголовки gcc. Мне также любопытно, почему я вижу в выходных данных компоновщика (в Windows) ссылки на /sources/cxx-stl/gnu-libstdc++/4.8/include/ с моим путем к виртуальной машине Linux.

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

Благодарю.

(Я отправил этот же вопрос Вот.)

0

Решение

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

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

Я изменился 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.mk для модуля зависит от Касабланка (так как это зависит от библиотека системного журнала):

LOCAL_LDLIBS    := -llog
0

Другие решения

Фактически закончилась компиляция кода проекта с помощью libstdc ++ (gnustl_shared).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector