我正在使用 OpenCV 和 JsonCpp 在 C++ 中创建一个库,以构建适用于 Android 和 iOS 的库。
在测试我的 Android 库时,我正在制作 JNI 文件,但是当我尝试加载库时,我得到了
java.lang.UnsatisfiedLinkError:dlopen 失败:找不到“libXYZ.so”引用的符号“_ZN4Json6WriterD2Ev”...
那是因为我认为我没有很好地构建我的 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,我也得到了
java.lang.UnsatisfiedLinkError:dlopen 失败:找不到“libXYZ.so”引用的符号“_ZN4Json6WriterD2Ev”...
编辑我的 jsoncpp/Android.mk :
LOCAL_PATH := $(调用我的目录)
包括 $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := .cpp LOCAL_MODULE := libJsoncpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/jsoncpp/include
LOCAL_SRC_FILES := src/lib_json/json_reader.cpp \ src/lib_json/json_value.cpp \ src/lib_json/json_writer.cpp
包括 $(BUILD_SHARED_LIBRARY)