ndk-build для jsoncpp всегда выдает одну ошибку

Предварительные условия: я использую Android Studio 2.1.2

Я скачал источник jsoncpp по следующей ссылке

https://github.com/open-source-parsers/jsoncpp

Я уже проверил следующий поток SO, не получая правильных решений:

LOCAL_MODULE_FILENAME не должен включать расширения файлов. Я получаю эту ошибку каждый раз, когда запускаю ndk-build в терминале

Использование JsonCpp в библиотеке платформы X-Cross

Мой общий Android.mk выглядит следующим образом:

LOCAL_PATH := $(call my-dir)

#JsonCpp lib

include $(CLEAR_VARS)

LOCAL_MODULE := jsoncpplib

include $(LOCAL_PATH)/jsnlib/Android.mk

LOCAL_STATIC_LIBRARIES := jsnlib

LOCAL_LDLIBS     += -llog -ldl

include $(BUILD_SHARED_LIBRARY)

С кодом для сборки некоторых других библиотек тоже, который работает нормально.

Android.kk моего jsoncpp выглядит следующим образом

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/jsnlib/include/json/*.h

FILE_LIST += $(wildcard $(LOCAL_PATH)/jsnlib/src/lib_json/*.cpp)

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_MODULE := jsnlib
LOCAL_MODULE_FILENAME:= libjsnlib

include $(BUILD_STATIC_LIBRARY)

Когда я делаю ndk-build всегда получаю следующую ошибку

Android NDK: jni/jsnlib/Android.mk:jsnlib: LOCAL_MODULE_FILENAME should not include file extensions
Android NDK: jni/jsnlib/Android.mk:jsnlib: LOCAL_MODULE_FILENAME must not contain a file extension

1 ответ

Решение

Что здесь происходит, так это то, что пока вы находитесь в процессе определения вашего jsoncpplib В модуль вы добавляете другой make-файл, который содержит собственное определение модуля:

include $(CLEAR_VARS)
LOCAL_MODULE := jsoncpplib
include $(LOCAL_PATH)/jsnlib/Android.mk
LOCAL_STATIC_LIBRARIES := jsnlib
LOCAL_LDLIBS     += -llog -ldl
include $(BUILD_SHARED_LIBRARY)

Вы должны переместить включение другого make-файла выше того места, где вы делаете CLEAR_VARS:

include $(LOCAL_PATH)/jsnlib/Android.mk

include $(CLEAR_VARS)
LOCAL_MODULE := jsoncpplib
LOCAL_STATIC_LIBRARIES := jsnlib
LOCAL_LDLIBS     += -llog -ldl
include $(BUILD_SHARED_LIBRARY)

Также, LOCAL_MODULE_FILENAME:= libjsnlib кажется излишним, так как LOCAL_MODULE := jsnlib должно привести к тому же имени библиотеки.

Другие вопросы по тегам