2

私は4つの静的ライブラリを持っていますlibavcodec.a libavutil.a libswscale.a libx264.a

とリンクさせたいlibmytest.so

以下の Android.mk スクリプトを試しました

LOCAL_PATH := $(call my-dir)
INITIAL_PATH := $(LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_MODULE := mytest

LOCAL_SRC_FILES := mytest.c

LOCAL_LDLIBS += -llog
LOCAL_WHOLE_STATIC_LIBRARIES := libavutil libavcodec libswscale libx264

include $(BUILD_SHARED_LIBRARY)

mytest.cこれらのライブラリから多くの関数を呼び出します。4 つのライブラリは の中に配置されPROJECTPATH\jni\ます。

しかし、私undefined referenceはそれらのライブラリからすべての関数を取得します。

共有ライブラリを作成できるようにしてみLOCAL_ALLOW_UNDEFINED_SYMBOLS := trueましたが、アプリを起動すると、

01-22 07:15:15.650: E/AndroidRuntime(9655): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]:  1868 cannot locate 'avcodec_register_all'...
01-22 07:15:15.650: E/AndroidRuntime(9655):     at java.lang.Runtime.loadLibrary(Runtime.java:370)
01-22 07:15:15.650: E/AndroidRuntime(9655):     at java.lang.System.loadLibrary(System.java:535)
4

1 に答える 1

3

PREBUILT_STATIC_LIBRARYソースからライブラリをビルドしない場合は、ライブラリごとに を定義する必要があります。

include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := $(LOCAL_PATH)/jni/libavutil.a
include $(PREBUILT_STATIC_LIBRARY)

... [他のビルド済みライブラリについて繰り返します]。

LOCAL_STATIC_LIBRARIESはモジュール名、つまり の名前のみを理解しますstuff that have been declared through their own ndk-build module definition。ただし、モジュールの欠落に関する警告が表示されなかったことに驚いていますが、問題に対応する最も可能性の高い説明です。

于 2014-02-03T03:20:44.063 に答える