2017-09-12 21 views
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と奇妙なものであるようです。誰かが何かを知っていますか?

答えて

0

libfn_dsp.soバイナリでした - 何らかの理由 - SONAMEなしrpathを構築しました。あなたはobjdumpユーティリティ(Android NDKにバンドルされています)を使って証明を見ることができます。

このライブラリを再構築できない場合は、Can I change 'rpath' in an already compiled binary?に従ってください。

+0

残念ながら、objdump -xとchrpath --listは私にrpathを返しませんでした。私はsonameでライブラリを構築して問題を解決しましたが、今では別のライブラリとソースコードがありません。また、rpathがなく、私は同じ問題があります – dspmihai

+0

あなたはobjdumpのNDK版を使用していますか? * host *バイナリは異なる結果を示すかもしれないことに注意してください。なぜソナメは状況を救うのですか? –

+0

これは決して試したことがありませんが、[patchelf](https://www.mankier.com/1/patchelf)ユーティリティを使用すると、あらかじめ作成されたライブラリ用にSONAMEを設定できるようになり、正しくロードされます。 –

関連する問題