私はAndroidアプリにMP3読み書き機能を追加しようとしています。私は出発点としてlame4androidアプリを使用しています。ファイルのエンコーディングは私にとってはうまくいくが、デコード関数に問題がある。デコード関数への参照が未定義になっている。未定義のラメデコード機能
は、ここに私のwrapper.cからの抜粋です:
#include "libmp3lame/lame.h"
#include "jni.h"
lame_t lame;
jint Java_com_intonia_dandy_WavStream_initEncoder(JNIEnv *env,
jobject jobj,
jint in_num_channels,
jint in_samplerate)
{
lame = lame_init();
...
return lame_init_params(lame);
}
hip_t hip;
jint Java_com_intonia_dandy_WavStream_initDecoder(JNIEnv *env, jobject jobj)
{
hip = hip_decode_init();
return hip != 0;
}
そして、ここlame.hからの宣言です:
lame_global_flags * CDECL lame_init(void);
typedef hip_global_flags *hip_t;
hip_t CDECL hip_decode_init(void);
私は、エラーメッセージになっています:
C:/ACode/dandy/src/main/jni/./wrapper.c:62: undefined reference to `hip_decode_init`
を
hip_decode
とhip_decode_exit
への未定義の参照も取得しています。しかし、lame_init
、lame_init_params
、lame_encode_buffer
、およびlame_encode_flush
はエラーを生成しません。 ndk-buildを実行するためにコマンドラインを使用してこれらのエラーが発生し、Android Studioにコンパイルを管理させるときに同じエラーが発生します。
lame_*
の機能とhip_decode_*
の機能との違いは何ですか?非推奨のlame_decode_*
を使用する必要がありますか?
EDIT:ndk-buildコマンドの出力を見ています。 .cファイルはコンパイル時にコンソールに表示されます。 hip_decode_init
はjni/libmp3lame/mpglib_interface.c
に定義されていますが、jni/Android.mk
にリストされていても、mpglib_interface
はコンパイルされません。何故なの???