因此,我尝试在 Android 应用程序的本机代码上使用 libopus。
我的 Android.mk 文件如下所示:
PLATFORM_PREFIX := /opt/android-ext/
LOCAL_PATH := $(PLATFORM_PREFIX)/lib
include $(CLEAR_VARS)
LOCAL_MODULE := libopus
LOCAL_SRC_FILES := libopus.a
include $(PREBUILT_STATIC_LIBRARY)
# I have to redeclare LOCAL_PATH because the library is in /opt/android-ext/
# and my project is somewhere else. Not very elegant.
LOCAL_PATH := /home/sergio/workspace/Project/jni
include $(CLEAR_VARS)
LOCAL_MODULE := opusUtilsNative
LOCAL_SRC_FILES := opusUtilsNative.c
LOCAL_C_INCLUDES += $(PLATFORM_PREFIX)/include
LOCAL_STATIC_LIBRARIES := android_native_app_glue libopus
include $(BUILD_SHARED_LIBRARY)
我在 opusUtilsNative.c 中的代码如下所示:
#include "opusUtilsNative.h"
#include <opus/opus.h>
#include <opus/opus_types.h>
JNIEXPORT jbyteArray JNICALL Java_Project_OpusUtils_encode
(JNIEnv * je, jclass jc, jbyteArray data){
int rc;
opus_int16 * testOutBuffer;
unsigned char* opusBuffer;
OpusDecoder *dec;
dec = opus_decoder_create(48000, 2, &rc);
return data;
}
当我尝试构建它时,它工作得很好仅当我删除使用“opus_decoder_create”函数的行时。否则我会得到这个:
error: undefined reference to 'opus_decoder_create'
我可以看到 opus_decoder_create 在 opus.h 上明确定义,它显然被包含在内,因为如果我排除该行,我将收到有关 opus_int16 和 OpusDecoder 声明的错误。为什么有些定义被包含而有些则没有?
任何帮助将不胜感激。
这很棘手。经过一番研究后,我意识到我没有正确交叉编译 opus 库,而且我毕竟没有 ARM 二进制文件。
验证您的库是否正确交叉编译的好方法:
cd /opt/android-ext/lib #Or wherever the .a file is
ar x libopus.a
file tables_LTP.o #Or any of the .o files generated by ar x
输出应如下所示:
tables_LTP.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
否则,您可能需要仔细检查交叉编译过程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)