为了减少应用程序的带宽使用,我尝试实现opus。
首先,我将源代码交叉编译成一个共享库。我将生成的.so文件复制到jni文件夹中的opus文件夹中。我还将所有opus头文件复制到opus文件夹中的包含子文件夹中。最后,我创建了一个Android.mk文件,允许在我的实现中使用这个.so文件。
所以我的文件结构如下:
/jni
/opus
/include
All opus header files
Android.mk
libopus.so
Android.mk
OpusEncoder.h
OpusDecoder.h
OpusEncoder.c
OpusDecoder.copus子文件夹中的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层。
jni文件夹中的Android.mk (应该构建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中公开的方法。有什么想法吗?
发布于 2014-02-20 09:06:27
好吧,所以这一切都是代表我的印刷错误。对于敏锐的观察者来说,为了制作预构建的opus库,我使用了include $(PREBUILD_SHARED_LIBRARY)调用,它应该是include $(PREBUILT_SHARED_LIBRARY) (区别是T而不是预构建结束时的D)。
因此,它没有创建我试图在主LOCAL_SHARED_LIBRARIES := opus文件中链接到的库。
这就是我如何为预构建的库创建我的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libopus
LOCAL_SRC_FILES := libopus.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)这是我编写的代码的Android.mk文件:
MY_PROJECT_PATH := $(call my-dir)
LOCAL_PATH = $(MY_PROJECT_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
APP_ABI := armeabi armeabi-v7a
LOCAL_PATH = $(MY_PROJECT_PATH)
LOCAL_MODULE := OpusCodec
LOCAL_SHARED_LIBRARIES := libopus
LOCAL_LDLIBS += -llog -landroid
LOCAL_SRC_FILES := OpusEncoder.c OpusDecoder.c
include $(BUILD_SHARED_LIBRARY)除了对预构建的库模块进行表面修改和重构我的主Android.mk文件之外,我不需要更改任何东西(您不需要像我最初尝试的那样指定LIB_PATH )。
https://stackoverflow.com/questions/21703203
复制相似问题