4

次の場所にあるチュートリアルに従おうとしています

http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on-Android-with-JNI

その要点は、JNIでLAMEMP3エンコーダーを使用できるようにすることです。

チュートリアルに記載されている各手順に従いました。私のプロジェクトはにあります

C:\workspace\

'LAME_Test'と呼ばれます。チュートリアルの「 CompilationwithNDK 」というラベルの付いたセクションに従って、この投稿の下に含まれている「Android.mk」というmakefileを作成しました。

64ビットマシンでWindows7を実行しています。CygwinとNDKをインストールしていて、自分のセットアップが作業中の別のプロジェクトで機能することをテストしました。しかし、私が行くとき

/cygdrive/c/workspace/LAME_Test/jni

Cygwinで、次のコマンドを発行します

 /cygdrive/c/Android/android-ndk-r8b/ndk-build

NDKが次の場所にある場合

C:\Android\android-ndk-r8b

コンパイルはこれらのような警告の束を吐き出します

warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]                                                                                                   

この投稿の下部に警告の小さな断片を同封しています(警告のリストは非常に大きく、付加価値ではなく、混乱を招く可能性があるため)。

これらの警告を解決し、きれいでクリーンなコンパイルを行うための巧妙な方法があるかどうか疑問に思っていました。

PS:上記のリンク(LAME4Android)で、サンプルプロジェクトをビルドして実行できたことを追加します。これには、ネイティブコードのコンパイルが必要でした。したがって、すべての警告にもかかわらず、プロジェクトは実際には正常にビルドされているように見えます。当初は警告で壊れたと思っていました。ただし、警告を修正する方法があれば、それは確かに素晴らしいことです。

Android.mkファイルの内容

LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE        := libmp3lame
    LOCAL_SRC_FILES     := \
    ./libmp3lame/bitstream.c \
    ./libmp3lame/encoder.c \
    ./libmp3lame/fft.c \
    ./libmp3lame/gain_analysis.c \
    ./libmp3lame/id3tag.c \
    ./libmp3lame/lame.c \
    ./libmp3lame/mpglib_interface.c \
    ./libmp3lame/newmdct.c \
    ./libmp3lame/presets.c \
    ./libmp3lame/psymodel.c \
    ./libmp3lame/quantize.c \
    ./libmp3lame/quantize_pvt.c \
    ./libmp3lame/reservoir.c \
    ./libmp3lame/set_get.c \
    ./libmp3lame/tables.c \
    ./libmp3lame/takehiro.c \
    ./libmp3lame/util.c \
    ./libmp3lame/vbrquantize.c \
    ./libmp3lame/VbrTag.c \
    ./libmp3lame/version.c

    LOCAL_LDLIBS := -llog

    include $(BUILD_SHARED_LIBRARY)

組み込み関数警告の互換性のない暗黙の宣言のログ

$ /cygdrive/c/Android/android-ndk-r8b/ndk-build
Cygwin         : Generating dependency file converter script
Compile thumb  : mp3lame <= bitstream.c
Compile thumb  : mp3lame <= encoder.c
C:/workspace/LAME_Test/jni/./libmp3lame/encoder.c: In function 'lame_encode_frame_init':
C:/workspace/LAME_Test/jni/./libmp3lame/encoder.c:202:9: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]                                                                                                 
C:/workspace/LAME_Test/jni/./libmp3lame/encoder.c: In function 'lame_encode_mp3_frame':
C:/workspace/LAME_Test/jni/./libmp3lame/encoder.c:471:17: warning: incompatible implicit declaration of built-in function 'bcopy' [enabled by default]                                                                                                    
Compile thumb  : mp3lame <= fft.c
Compile thumb  : mp3lame <= gain_analysis.c
and so on...
4

1 に答える 1

10

たくさん検索したところ、私が探していた答えがここで見つかったようです

LameMP3EncoderはAndroid用にコンパイルします

私にとって重要なのは、Android.mkファイルに次の行が追加されていることを確認することでした

LOCAL_CFLAGS = -DSTDC_HEADERS

ジェームズ・チャンが述べたように。

この投稿の下に完全なmakefileを同封しているので、私が言っていることは完全に明確です。

更新されたAndroid.mkファイルの内容

LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE        := libmp3lame
    LOCAL_SRC_FILES     := \
    ./libmp3lame/bitstream.c \
    ./libmp3lame/encoder.c \
    ./libmp3lame/fft.c \
    ./libmp3lame/gain_analysis.c \
    ./libmp3lame/id3tag.c \
    ./libmp3lame/lame.c \
    ./libmp3lame/mpglib_interface.c \
    ./libmp3lame/newmdct.c \
    ./libmp3lame/presets.c \
    ./libmp3lame/psymodel.c \
    ./libmp3lame/quantize.c \
    ./libmp3lame/quantize_pvt.c \
    ./libmp3lame/reservoir.c \
    ./libmp3lame/set_get.c \
    ./libmp3lame/tables.c \
    ./libmp3lame/takehiro.c \
    ./libmp3lame/util.c \
    ./libmp3lame/vbrquantize.c \
    ./libmp3lame/VbrTag.c \
    ./libmp3lame/version.c 

    LOCAL_LDLIBS := -llog
    LOCAL_CFLAGS = -DSTDC_HEADERS

    include $(BUILD_SHARED_LIBRARY)
于 2012-11-09T11:46:48.803 に答える