我正在使用OpenCV和JsonCpp用C++创建一个库,以构建适用于Android和iOS的库。

在为Android测试我的库时,我正在制作JNI文件,但是当我尝试加载该库时,我得到了



那是因为我认为我没有很好地构建我的Json库。

我使用的库就是这个库:https://github.com/open-source-parsers/jsoncpp

我的Android.mk是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on

include $(LOCAL_PATH)/jsoncpp/Android.mk
include /Users/localmac/Desktop/AndroidDevelopment/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk

OPENCV_LIB_TYPE:=SHARED

LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_C_INCLUDES += /Users/localmac/mylibrary/OpenCVtry/
LOCAL_C_INCLUDES += /Users/localmac/Desktop/RD/OpenCVtry/Libraries/jsoncpp-master/include

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_MODULE    := libXYZ
LOCAL_SRC_FILES := androidClass.cpp main.cpp utils.cpp
LOCAL_LDLIBS     += -llog -ldl

include $(BUILD_SHARED_LIBRARY)

我不知道该怎么做。

先感谢您。

编辑,这不是NDK编译的错误。

即使我编译了JsonCpp,我也得到了



编辑我的jsoncpp / Android.mk:

最佳答案

您没有在makefile中链接到Jsoncpp。您应该添加以下行:

LOCAL_SHARED_LIBRARIES := libJsoncpp

在最后一个include $(BUILD_SHARED_LIBRARY)之前。

您必须为此变量(及其姐妹LOCAL_STATIC_LIBRARIES)指定模块名称,即为LOCAL_MODULE变量指定的名称。

另外,这避免了您指定LOCAL_C_INCLUDE变量中的包含内容(因为在我在文章顶部提到的变量中指定库时,makefile将直接包含它们)。

编辑:为了完整起见,我将添加您可以指定多个库,如下所示:
LOCAL_SHARED_LIBRARIES = libJsoncpp \
                         libOpenCV \
                         ...
LOCAL_STATIC_LIBRARIES也是如此。

10-08 17:06