gpt4 book ai didi

android ndk 未定义对方法的引用

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:06 25 4
gpt4 key购买 nike

您好,很抱歉发了这么长的帖子,我正在尝试编译一些静态类,即 jsmn.c、json.c 和 buf.c,它们是我从 https://github.com/alisdair/jsmn-example/downloads 下载的 jsmn json 库的一部分。 .

我正在编译两个 STATIC_LIBRARIES lib1 和 json_librrary.lib1 具有依赖于 json_library 的 native 代码。然后我将两个库制作成一个包含的共享库 gnuSTL_static 和 lib1

我的文件夹结构如下

jni/lib1/ANdroid.mk

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

include $(CLEAR_VARS)
# Module Name
LOCAL_MODULE := lib1
LOCAL_STATIC_LIBRARIES := json_library
........
.......
......
include $(BUILD_STATIC_LIBRARY)

jni/Android.mk

# Here we give our module name
LOCAL_MODULE := lib2
# list the static modules included here!!!
LOCAL_STATIC_LIBRARIES := gnustl_static lib1
....
include $(BUILD_SHARED_LIBRARY)

jni/应用程序.mk

APP_MODULES   :=  lib2
# Optimization for release
APP_OPTM := release
#Targets
APP_ABI := armeabi-v7a armeabi

所以在 lib1 中我有一个类,它从名为 json_tokenise

的 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 ****

当我查看内部时 [obj/local/armeabi-v7a/我可以看到libjson_library.a liblib1.a libgnuSTL_static.a 正在为 armabi-v7 生成,但由于错误而无法生成 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 文件。

关于android ndk 未定义对方法的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com