【问题标题】:ndk-build for jsoncpp always giving one errorndk-build for jsoncpp 总是给出一个错误
【发布时间】:2016-09-01 14:40:38
【问题描述】:

先决条件:我使用的是 Android Studio 2.1.2

我已经从以下链接下载了 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)

还有用于构建其他一些库的代码,运行良好。

我的jsoncpp的Android.mk如下

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

【问题讨论】:

  • 在这种情况下你为什么需要LOCAL_MODULE_FILENAME?好像你可以直接删除它。
  • @Michael 也尝试删除它,没有变化,得到同样的错误。还尝试了 LOCAL_C_INCLUDES := $(LOCAL_PATH)/jsnlib/include/json 的另一件事,但没有成功。
  • 好吧,您应该将include $(LOCAL_PATH)/jsnlib/Android.mk 移动到您的主Android.mk 中,使其位于include $(CLEAR_VARS) 上方。
  • 非常感谢您的意见。现在我可以为 jsoncpp 构建 .so。唯一的问题是,当我在构建时将包含的 make 文件转移到其给出的问题之上时,我在它上面包含的 cpp 文件也是如此。这是另一个问题,我可能需要为本地路径声明单独的 var,然后它将得到修复。这就是我的想法。你能把你的意见放在答案中吗?以便我接受你的回答。

标签: android-studio android-ndk jsoncpp


【解决方案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 应该产生相同的库名称。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多