移植编译alsa-util时遇到一个奇葩错误如下
[ 98% 218/222] target C: aplay <= vendor/xxxx/bin/alsa-utils-1.1.9/aplay/aplay.c
vendor/xxxx/bin/alsa-utils-1.1.9/aplay/aplay.c:3:1: warning: return type of 'main' is not 'int' [-Wmain-return-type]
void main()
^
vendor/xxxx/bin/alsa-utils-1.1.9/aplay/aplay.c:3:1: note: change return type to 'int'
void main()
^~~~
int
1 warning generated.
[ 99% 221/222] target Strip: aplay (out/target/product/xxxx/obj/EXECUTABLES/aplay_intermediates/aplay)
FAILED: out/target/product/se1000/obj/EXECUTABLES/aplay_intermediates/aplay
/bin/bash -c "CLANG_BIN=prebuilts/clang/host/linux-x86/clang-r383902b1/bin CROSS_COMPILE=prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- XZ=prebuilts/build-tools/linux-x86/bin/xz build/soong/scripts/strip.sh -i out/target/product/xxxx/symbols/system/bin/aplay -o out/target/product/xxxx/obj/EXECUTABLES/aplay_intermediates/aplay -d out/target/product/xxxx/obj/EXECUTABLES/aplay_intermediates/aplay.strip.d --keep-mini-debug-info"
rm: out/target/product/xxxx/obj/EXECUTABLES/aplay_intermediates/aplay: Is a directory
看out下文件aplay.o已经生成,就在最后一步报错了,不像是代码问题
为了验证是否是代码问题,写了个空main函数的aplay.c来编译还是报一样的错误,证明不是代码问题
报错时Android.mk写法如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := aplay
LOCAL_C_INCLUDES +=
$(LOCAL_PATH)/include
$(LOCAL_PATH)/../alsa-lib-1.1.9/include
LOCAL_SRC_FILES :=
aplay/aplay.c
#LOCAL_SHARED_LIBRARIES := libasound
LOCAL_STATIC_LIBRARIES := libasound
LOCAL_CFLAGS += -Wall -Wno-unused-parameter -std=gnu99
include $(BUILD_EXECUTABLE)
分析难道是module name与C文件或文件夹重名导致的?
修改LOCAL_MODULE 后编译OK
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := alsa_aplay
LOCAL_C_INCLUDES +=
$(LOCAL_PATH)/include
$(LOCAL_PATH)/../alsa-lib-1.1.9/include
LOCAL_SRC_FILES :=
aplay/aplay.c
#LOCAL_SHARED_LIBRARIES := libasound
LOCAL_STATIC_LIBRARIES := libasound
LOCAL_CFLAGS += -Wall -Wno-unused-parameter -std=gnu99
#LOCAL_WHOLE_STATIC_LIBRARIES := alpu_fa_000_static
include $(BUILD_EXECUTABLE)



