Как создать собственный исполняемый файл Android, который использует библиотеку Boost C ++ - PullRequest
1 голос
/ 31 января 2012

У меня проблема с созданием собственной библиотеки для Android, которая использует библиотеку Boost C ++.Команда link, сгенерированная ndk-build, определяет библиотеки повышения после stdc ++, что приводит к нескольким неопределенным ссылкам на элементы STL.Я могу избавиться от ошибок ссылок (и сгенерировать рабочую библиотеку), отредактировав команду link и переместив библиотеки boost, чтобы они были указаны до stdc ++.

Как я могу заставить ndk-build поставить библиотеки boostперед stdc ++ в команде link?(Или есть другое решение для этого?)

Для справки, мой файл Android.mk вставлен ниже.

Спасибо, Шломи

=============== Файл Android.mk =====================

LOCAL_PATH := $(call my-dir)
DEBUG_SERVER := $(HOME)/upontek_Host_Gen_Dev/Host_Infra/NtrigNetPlatform/DebugServer

include $(CLEAR_VARS)

LOCAL_MODULE := ntrig_generic_api

LOCAL_CFLAGS := -DANDROID_NDK -O3 -Wall -c -fmessage-length=0 -Wno-write-strings
ifeq ($(TARGET_ARCH_ABI),x86)
    # x86 causes link error if compiling with -fstack-protector
    LOCAL_CFLAGS += -fno-stack-protector
else
    LOCAL_CFLAGS := -DANDROID_NDK -DBOOST_THREAD_LINUX -DBOOST_HAS_PTHREADS -D_GLIBCXX__PTHREADS -fexceptions
endif

LOCAL_C_INCLUDES += \
    ./inc \
    ../../Common/inc \
    $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include \
    $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI)/include \
    $(BOOST_DIR)/boost_1_45_0 \
    $(DEBUG_SERVER)/Common/inc \
    $(DEBUG_SERVER)/ClientLib/inc

LOCAL_SRC_FILES := \
    ../src/GenericApi.c ../src/DebugClient.cpp

LOCAL_LDLIBS := \
    -L$(BOOST_DIR)/build/lib -lboost_regex-mt -lboost_date_time-mt -lboost_system-mt \
    -lboost_thread-mt

include $(BUILD_STATIC_LIBRARY)

1 Ответ

1 голос
/ 02 февраля 2012

Хорошо, проблема решена.Решение состоит в простом добавлении libstdc ++. A в конец списка библиотеки надстроек, поэтому команда компоновщика содержит две спецификации этой библиотеки.Оказывается, в команде link можно использовать одну и ту же библиотеку в двух местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...