2016-09-01 5 views
0

предпосылками: Я использую Android Studio 2.1.2НДК-строить для jsoncpp всегда дает одну ошибку

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

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

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

LOCAL_MODULE_FILENAME should not include file extensions i get this error each time i run ndk-build in terminal

Using JsonCpp on X-Cross platform library

Мой общий 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.mk Мой 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) 

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

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 
+0

Зачем вам в этом случае нужно LOCAL_MODULE_FILENAME? Похоже, вы могли просто удалить его. – Michael

+0

@Michael Tried удаляет это также, без изменений, получая такую ​​же ошибку. Еще одна вещь, с LOCAL_C_INCLUDES: = $ (LOCAL_PATH)/jsnlib/include/json, также не имеет успеха. – AdiAtAnd

+0

Ну, вероятно, вам стоит переместить этот 'include $ (LOCAL_PATH) /jsnlib/Android.mk ' в ваш основной Android.mk, чтобы он был выше 'include $ (CLEAR_VARS)'. – Michael

ответ

1

Что здесь происходит то, что в то время как вы находитесь в середине определения ваш модуль jsoncpplib вы включаете в себя еще один файл makefile, который содержит свое собственное определение модуля:

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

Вы должны переместить включение другой Makefile, чтобы выше, где вы делаете 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 должно привести к одной и той же библиотеки имени.