1
私はAndroidアプリケーション用のネイティブライブラリを構築しようとしています。 2つの図書館があり、最終的な図書館でそれらをリンクする必要がありますが、いくつか問題があります。 Android.mkコード:Android NDK共有ライブラリ
LOCAL_CFLAGS := -Wall -Wfloat-equal -std=c99
LOCAL_PATH := $(call my-dir)/..
include $(CLEAR_VARS)
LOCAL_MODULE := cpu-lib
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/cpu/inc
LOCAL_EXPORT_CPPFLAGS := $(LOCAL_CFLAGS)
LOCAL_EXPORT_LDLIBS := -llog
LOCAL_SRC_FILES := $(LOCAL_PATH)/cpu/lib/$(TARGET_ARCH_ABI)/libdemoDSP.so
LOCAL_STATIC_LIBRARIES := gnustl_static
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := dsp-lib
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/dsp/inc
LOCAL_EXPORT_CPPFLAGS := $(LOCAL_CFLAGS)
LOCAL_EXPORT_LDLIBS := -llog
LOCAL_SRC_FILES := $(LOCAL_PATH)/dsp/lib/$(TARGET_ARCH_ABI)/libfn_dsp.so
LOCAL_STATIC_LIBRARIES := gnustl_static
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := process
LOCAL_SRC_FILES := process.cpp
LOCAL_SHARED_LIBRARIES := cpu-lib dsp-lib
include $(BUILD_SHARED_LIBRARY)
問題はdlopenのはlibfn_dsp.soを見つけることができませんということです。 出力をNDKは、依存:
ndk-depends libs\arm64-v8a\libprocess.so
WARNING: Could not find library: ./obj/local/arm64-v8a/libfn_dsp.so
libprocess.so
liblog.so
libdemoDSP.so
libstdc++.so
libm.so
libdl.so
libc.so
./obj/local/arm64-v8a/libfn_dsp.so
それはそれのlibと奇妙なものであるようです。誰かが何かを知っていますか?
残念ながら、objdump -xとchrpath --listは私にrpathを返しませんでした。私はsonameでライブラリを構築して問題を解決しましたが、今では別のライブラリとソースコードがありません。また、rpathがなく、私は同じ問題があります – dspmihai
あなたはobjdumpのNDK版を使用していますか? * host *バイナリは異なる結果を示すかもしれないことに注意してください。なぜソナメは状況を救うのですか? –
これは決して試したことがありませんが、[patchelf](https://www.mankier.com/1/patchelf)ユーティリティを使用すると、あらかじめ作成されたライブラリ用にSONAMEを設定できるようになり、正しくロードされます。 –