2016-05-08 3 views
1

私は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_decodehip_decode_exitへの未定義の参照も取得しています。しかし、lame_initlame_init_paramslame_encode_buffer、およびlame_encode_flushはエラーを生成しません。 ndk-buildを実行するためにコマンドラインを使用してこれらのエラーが発生し、Android Studioにコンパイルを管理させるときに同じエラーが発生します。

lame_*の機能とhip_decode_*の機能との違いは何ですか?非推奨のlame_decode_*を使用する必要がありますか?

EDIT:ndk-buildコマンドの出力を見ています。 .cファイルはコンパイル時にコンソールに表示されます。 hip_decode_initjni/libmp3lame/mpglib_interface.cに定義されていますが、jni/Android.mkにリストされていても、mpglib_interfaceはコンパイルされません。何故なの???

答えて

1

配布されているLAMEライブラリでは、デコードが有効になっていないことが判明しました。

  1. #define HAVE_MPGLIB 1コピー

  2. mpglib_interface.cへのすべての.cおよび.hファイルLAME分布のmpglibディレクトリから追加します。それは作業を取得するために、私は、次の手順を実行しなければなりませんでした。

  3. Android.mkを編集してmpglibの.cファイルを追加します。

EDIT:代わりに修正mpglib_interface.cのは、それがコンパイルフラグを設定すると良いでしょうHAVE_MPGLIB、 定義します。 2+のAndroid Studioでの作業

、build.gradleは

android { 
    defaultConfig { 
     ndk { 
      moduleName "libmp3lame" 
      cFlags "-DSTDC_HEADERS -DHAVE_MPGLIB" 
     } 
    } 
} 

またはAndroid.mkにが含まれている必要があります。

LOCAL_CFLAGS = -DSTDC_HEADERS -DHAVE_MPGLIB 
関連する問題