0

同様の問題を何時間も検索し、多くの代替手段を試しましたが、解決策はありませんでした。ここ StackOverflow で、この質問を優秀な頭脳にもたらします。Opus オーディオ コーデックを Android プロジェクトに取り込もうとしていますが、未定義の参照エラーが発生し続けます。

他の投稿で言及されている典型的な問題は当てはまらないようです。名前とパスは正しいようで、Opus のすべてのヘッダー ファイルが含まれており、私の関数ヘッダーは Javah によって生成されました。

構造は:
jni--(dir)
--Android.mk
--opus_jni.c
--com_ether_viz_OpusCodec.h
--opus----(dir)
----Android.mk
----include---- (ディレクトリ)
----src--------(ディレクトリ)

トップレベルの Android.mk:

JNIPATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(JNIPATH)
include $(CLEAR_VARS)    
LOCAL_MODULE:=opus_jni
LOCAL_SRC_FILES:= opus_jni.c
LOCAL_SHARED_LIBRARIES := opus
include $(BUILD_SHARED_LIBRARY)

opus ディレクトリの Android.mk:

    LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

MY_MODULE_DIR       := opus

LOCAL_MODULE        := opus
LOCAL_SRC_FILES     := \
$(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/src/*.c*)) \
$(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/celt/*.c*)) \
$(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/silk/*.c*)) \
$(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/silk/fixed/*.c*))
LOCAL_LDLIBS        := -lm -llog
LOCAL_C_INCLUDES    := \
$(ROOT_DIR)/$(MY_MODULE_DIR)/include \
$(ROOT_DIR)/$(MY_MODULE_DIR)/silk \
$(ROOT_DIR)/$(MY_MODULE_DIR)/silk/fixed \
$(ROOT_DIR)/$(MY_MODULE_DIR)/celt
LOCAL_CFLAGS        := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS    += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
LOCAL_CPPFLAGS      := -DBSD=1 
LOCAL_CPPFLAGS          += -ffast-math -O3 -funroll-loops

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)


include $(BUILD_SHARED_LIBRARY)

コンソール出力:

/Users/ethervision/Documents/AAAA_New/Android/android-ndk-r10b/ndk-build all 
[armeabi] SharedLibrary  : libopus.so
[armeabi] Install        : libopus.so => libs/armeabi/libopus.so
[armeabi] Compile thumb  : opus_jni <= opus_jni.c
[armeabi] SharedLibrary  : libopus_jni.so
/Users/ethervision/Documents/AAAA_New/Android/android-ndk-r10b/toolchains/arm-linux-androideabi-
4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-
androideabi/bin/ld: ./obj/local/armeabi/objs/opus_jni/opus_jni.o: in function
Java_com_plworld_partyline_OpusCodec_initOpusDecoder:jni/opus_jni.c:30: 
error: undefined reference to 'opus_decoder_create'

私は NDK にかなり慣れていないので、単純なものが欠けているだけかもしれませんが、ここや他のサイトで見つけた多数のバリエーションを試しました。

4

2 に答える 2