Связывание сторонней статической библиотеки с другой статической библиотекой

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

Нет правила для создания цели `.../libqqrcLib.a', необходимого для libqqrcAPI.a

Проблема была решена путем обновления до более новой версии NDK, которая поддерживает работу с готовыми библиотеками (5b)

Вот Android.mk, который я использую:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := qqrcLib  
LOCAL_SRC_FILES := libqqrc.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/coreLib/include

include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/qqrc/ 
LOCAL_MODULE    := qqrcAPI
LOCAL_SRC_FILES := qqrcEngineImpl.cpp 
LOCAL_STATIC_LIBRARIES := qqrcLib

include $(BUILD_STATIC_LIBRARY)

По сути, у меня есть статическая библиотека qqrc.a, для которой я объявил модуль «qqrcLib».
Я хочу иметь возможность связать ее со вторым модулем с именем «qqrcAPI» (на него ссылаются в qqrcEngineImpl.cpp). )
Важно иметь его в формате этих двух библиотек, так как libqqrc.a компилируется с использованием другого подхода.

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

APP_MODULES      := qqrcAPI 
APP_PROJECT_PATH := $(call my-dir)./..

Для того, чтобы можно было создать статическую библиотеку. (иначе я не получил вывода..)

Текущая проблема для меня заключается в том, что, несмотря на то, что у меня есть отдельный модуль для предварительно собранной библиотеки и кажется, что он компилируется, я не могу создать комбинированную статическую библиотеку, в которой будет храниться предварительно созданная библиотека.< br> У меня есть в каталоге obj\local\armeabi предварительно собранная библиотека (qqrcLib.a) и вновь сформированная статическая библиотека (qqrcAPI.a), но кажется, что она не была связана, потому что новый модуль слишком мал...

Что я делаю не так?

помощь? :)


person Ita    schedule 08.03.2011    source источник


Ответы (1)


Я не думаю, что вы можете использовать статические библиотеки и JNI. Библиотека верхнего уровня, которую вы собираетесь использовать в качестве JNI, должна быть общедоступной.

Насколько я понимаю проблему, когда вы добавляете статическую библиотеку в другую статическую библиотеку, второй файл библиотеки .a не включает всю первую библиотеку, т.е. вам все равно нужно связать оба файла .a, чтобы сделать .so (или другой фактический исполняемый).

Должна быть какая-то вещь, в которой вы действительно пытаетесь использовать эти библиотеки? Я думаю, что решение вашей проблемы исходит из того, каким будет следующий шаг (вероятно, общая библиотека .so).

person KayEss    schedule 04.06.2011
comment
Ваше наблюдение верно. Я пытаюсь воспользоваться системой сборки NDK, чтобы создать статическую библиотеку, которую я могу выдать как API. Я надеялся, что смогу избежать использования файла .so, но, к сожалению, не могу. - person Ita; 05.06.2011