android ndk对方法的未定义引用

android ndk对方法的未定义引用,android,android-ndk,static-libraries,undefined-reference,android-ndk-r7,Android,Android Ndk,Static Libraries,Undefined Reference,Android Ndk R7,您好,很抱歉写了这么长的文章,我试图编译一些静态类,即jsmn.c、json.c和buf.c,它们是我从下载的jsmn json库的一部分 我正在编译两个静态库lib1和json_librrary。lib1具有依赖于json_库的本机代码。然后我将两个库制作成一个共享库,其中包含 gnustl_static和lib1 我的文件夹结构如下 jni/lib1/ANdroid.mk jni/Android.mk jni/Application.mk 因此,在lib1中,我有一个类,它调用json库中名

您好,很抱歉写了这么长的文章,我试图编译一些静态类,即jsmn.c、json.c和buf.c,它们是我从下载的jsmn json库的一部分

我正在编译两个静态库lib1和json_librrary。lib1具有依赖于json_库的本机代码。然后我将两个库制作成一个共享库,其中包含 gnustl_static和lib1

我的文件夹结构如下

jni/lib1/ANdroid.mk

jni/Android.mk

jni/Application.mk

因此,在lib1中,我有一个类,它调用json库中名为json_tokenise的方法

当我查看内部时[obj/local/armeabi-v7a/我可以看到 正在为armabi-v7生成libjson_library.a libliblib1.a libgnustl_static.a,但由于错误,它无法生成lib2


请帮助或指导我哪里出了问题我已经花了两天时间在这方面,我是NDK的新手。

您应该修复您的
jni/lib1/Android.mk
文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := json_library
LOCAL_SRC_FILES := 3rdParty/jsmn/jsmn.c 3rdParty/jsmn/buf.c 3rdParty/jsmn/log.c 3rdParty/jsmn/json.c 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/3rdParty/jsmn
# Optional compiler flags.
LOCAL_LDLIBS   = -lz -lm
LOCAL_CFLAGS   = -Wall -pedantic -std=c99 -g
include $(BUILD_STATIC_LIBRARY)

如果在此之后仍然存在问题,请在命令行上运行参数为
V=1
ndk build
,并发布此构建的完整输出和所有
Android.mk
文件的完整内容。

我遇到了类似的问题。
json\u library.a
应该包含在预构建静态库模块中。而且应针对所需的平台进行编译

include $(CLEAR_VARS)
LOCAL_MODULE := json_core
LOCAL_SRC_FILES := /3rdParty/jsmn/json_library.a
include $(PREBUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := json_library
LOCAL_SRC_FILES := /3rdParty/jsmn/jsmn.c /3rdParty/jsmn/buf.c /3rdParty/jsmn/log.c /3rdParty/jsmn/json.c 
不需要单独包含每个文件

LOCAL_C_INCLUDES := /3rdParty/jsmn/
最后,需要指定
json_库
模块依赖于
json_核心
(预构建库)

通过这种方式,链接器知道在哪里可以找到每个模块的所有方法定义

#include <string.h>
#include <stdio.h>
 #include <stdlib.h>
 #include <jsmn/jsmn.h>
#include <jsmn/json.h>
#include <jsmn/buf.h>

jsmntok_t *tokens=json_tokenise((char *)data);

typedef enum {
START,
WRAPPER,
MESSAGE,
ROUTE,
OBJECT,
ARRAY,
SKIP,
STOP
}parse_state;
undefined reference to `json_tokenise(char*)'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/lib2.so] Error 1

**** Build Finished ****
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := json_library
LOCAL_SRC_FILES := 3rdParty/jsmn/jsmn.c 3rdParty/jsmn/buf.c 3rdParty/jsmn/log.c 3rdParty/jsmn/json.c 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/3rdParty/jsmn
# Optional compiler flags.
LOCAL_LDLIBS   = -lz -lm
LOCAL_CFLAGS   = -Wall -pedantic -std=c99 -g
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := json_core
LOCAL_SRC_FILES := /3rdParty/jsmn/json_library.a
include $(PREBUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := json_library
LOCAL_SRC_FILES := /3rdParty/jsmn/jsmn.c /3rdParty/jsmn/buf.c /3rdParty/jsmn/log.c /3rdParty/jsmn/json.c 
LOCAL_C_INCLUDES := /3rdParty/jsmn/
LOCAL_STATIC_LIBRARIES := json_core 
# Optional compiler flags.
LOCAL_LDLIBS   = -lz -lm
LOCAL_CFLAGS   = -Wall -pedantic -std=c99 -g
include $(BUILD_STATIC_LIBRARY)