ビルド済みの 2 つの共有ライブラリ (A と B) に依存する Android アプリケーションを作成しています。どちらのライブラリも、armeabi および armeabi-v7a アーキテクチャで動作するように構成されています。
最初のビルド済みライブラリ A は libsodium です。2 つ目のビルド済みライブラリ B は、libsodium に依存する Rust ライブラリです。Rust のビルド済みライブラリをコンパイルするとき、依存関係として libsodium が使用されます。
現在、2 つのビルド済みライブラリ A と B を Android アプリケーションで使用したいと考えています。System.loadLibrary() を使用して A をロードすると、問題なく動作します。しかし、B をロードすると、B が A で定義されたメソッドを見つけられないというエラーが発生します。
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "crypto_sign_ed25519_detached" referenced by "libB.so"...
私の Android.mk は次のとおりです。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sodium
LOCAL_SRC_FILES := ../jniLibs/$(TARGET_ARCH_ABI)/libsodium.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/sodium.h $(LOCAL_PATH)/include/sodium/
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := rust
LOCAL_SRC_FILES := ../jniLibs/$(TARGET_ARCH_ABI)/librust.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/sodium.h $(LOCAL_PATH)/include/sodium/
LOCAL_SHARED_LIBRARIES := sodium
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := rust-manager
LOCAL_SRC_FILES := rust-manager.c
LOCAL_SHARED_LIBRARIES := rust sodium
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/include/sodium.h $(LOCAL_PATH)/include/sodium/
include $(BUILD_SHARED_LIBRARY)
rust-manager.c ファイルは、ネイティブ Java 関数を Rust ライブラリにマップする C 関数を含む javah を使用して生成された C ラッパーですが、この時点では無視できると思います。どんな助けでも大歓迎です!