我正在尝试按照位于以下位置的教程
http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on-Android-with-JNI
这样做的要点是它允许使用带有JNI的LAME MP3编码器。
我按照教程中提到的每个步骤进行操作。我的项目位于
C:\workspace\
并称为'LAME_Test'。根据教程中标记为使用NDK编译的部分,我继续编写了一个名为“Android.mk”的makefile,如下所示。
我在64位计算机上运行Windows 7。我安装了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]
我在这篇帖子的底部附上一小段警告(因为警告列表非常大,可能只会增加混乱 - 而不是增加价值)。
想知道是否有一种灵巧的方法可以解决这些警告并获得一个漂亮,干净的编译。
P.S:我将补充一点,我能够在上面的链接(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...
答案 0 :(得分:10)
经过大量搜索,看起来我找到的答案就在这里找到了
Lame MP3 Encoder compile for 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)