android - Declaración implícita incompatible de advertencia de función incorporada usando NDK con LAME
makefile jni (1)
Intento seguir el tutorial ubicado en la siguiente ubicación
http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on-Android-with-JNI
La esencia de esto es que permite usar el codificador LAME MP3 con JNI.
Seguí cada uno de los pasos mencionados en el tutorial. Mi proyecto está ubicado en
C:/workspace/
y se llama ''LAME_Test''. En la sección titulada Compilación con NDK en el tutorial, continué e hice un archivo llamado ''Android.mk'' como se adjunta debajo de esta publicación.
Estoy ejecutando Windows 7 en una máquina de 64 bits. Tengo Cygwin y NDK instalados y he probado que mi configuración funciona en otro proyecto en el que estoy trabajando. Sin embargo, cuando voy a
/cygdrive/c/workspace/LAME_Test/jni
en Cygwin y emita el siguiente comando
/cygdrive/c/Android/android-ndk-r8b/ndk-build
dado que el NDK está ubicado en
C:/Android/android-ndk-r8b
la compilación escupe un montón de advertencias como estas
warning: incompatible implicit declaration of built-in function ''memset'' [enabled by default]
Adjuntaré un pequeño fragmento de las advertencias en la parte inferior de esta publicación (porque la lista de advertencias es realmente grande y puede agregar desorden, en lugar de agregar valor).
Me preguntaba si hay una forma elegante de resolver estas advertencias y obtener una compilación agradable y limpia.
PD: Añadiré que pude construir + ejecutar el proyecto de muestra en el enlace de arriba (LAME4Android). Esto requirió la compilación del código nativo. Entonces, parece que el proyecto, de hecho, funciona bien a pesar de todas las advertencias . Inicialmente pensé que estaba roto debido a las advertencias. Sin embargo, sería realmente genial si hubiera alguna manera de arreglar las advertencias.
Contenido del archivo 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)
Registro de declaraciones implícitas incompatibles de advertencias de funciones incorporadas
$ /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...
Después de buscar mucho, parece que la respuesta que estaba buscando se encontró aquí.
Lame MP3 Encoder compila para Android
La clave para mí fue asegurarme de que se agregara la siguiente línea a mi archivo Android.mk
LOCAL_CFLAGS = -DSTDC_HEADERS
como lo menciona James Zhang.
Adjunto mi archivo completo debajo de esta publicación, así que lo que estoy diciendo es perfectamente claro.
Contenido del archivo Android.mk actualizado
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)