2

AndroidおよびiOS用のライブラリを構築するために、OpenCVとJsonCppを使用してC++でライブラリを作成しています。

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 := $(my-dir を呼び出す)

$(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) を含める

4

1 に答える 1

1

メイクファイルで 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

于 2014-09-26T14:47:56.743 に答える