そのため、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 宣言に関するエラーが発生するため、明らかに含まれています。含まれている定義と含まれていない定義があるのはなぜですか?
どんな助けでも大歓迎です。