爲了努力減少應用程序的帶寬使用,我試圖做一個opus的實現。未定義對opus函數的引用,同時包含適當的頭文件
首先,我將源代碼交叉編譯到共享庫中。我將生成的.so文件複製到我的jni文件夾內的opus文件夾中。我還將所有opus頭文件複製到opus文件夾中的include子文件夾中。最後,我創建了一個Android.mk文件,以允許在我的實現中使用這個.so文件。
所以我的文件結構如下:
/jni
/opus
/include
All opus header files
Android.mk
libopus.so
Android.mk
OpusEncoder.h
OpusDecoder.h
OpusEncoder.c
OpusDecoder.c
的鉅著子文件夾的Android.mk文件具有以下內容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := opus
LOCAL_SRC_FILES := jni/opus/libopus.so
LOCAL_C_INCLUDES := jni/opus/include
include $(PREBUILD_SHARED_LIBRARY)
至於建議,露出的.so文件用法。
現在,在我的編碼器/解碼器的實現中,我導入了opus.h
,並使用適當的函數將它們通過JNI公開給Java層。
的Android.mk在我JNI文件夾(其應當建立我JNI層)如下:
LOCAL_PATH := $(call my-dir)
MY_DIR := $(LOCAL_PATH)
include $(CLEAR_VARS)
include jni/opus/Android.mk
APP_ABI := armeabi armeabi-v7a
LOCAL_PATH := $(MY_DIR)
LIB_PATH := $(LOCAL_PATH)/../lib
LOCAL_LDLIBS += -llog -landroid
#LOCAL_LDLIBS += $(LIB_PATH) -lopus
LOCAL_SHARED_LIBRARIES := opus
LOCAL_MODULE := OpusCodec
LOCAL_SRC_FILES := OpusEncoder.c \
OpusDecoder.c
include $(BUILD_SHARED_LIBRARY)
然而,當我運行ndk-build
命令時,得到下面的6個錯誤消息:
error: undefined reference to 'opus_encoder_create'
error: undefined reference to 'opus_encode'
error: undefined reference to 'opus_encoder_destroy'
error: undefined reference to 'opus_decoder_create'
error: undefined reference to 'opus_decode'
error: undefined reference to 'opus_decoder_destroy'
以下哪一種方法是由opus.h
在libopus.so
中公開的。有任何想法嗎?