为了努力减少应用程序的带宽使用,我试图做一个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
中公开的。有任何想法吗?