首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><AOSP>在构建安卓系统时对“__android_log_print”错误的未定义引用

<AOSP>在构建安卓系统时对“__android_log_print”错误的未定义引用
EN

Stack Overflow用户
提问于 2018-01-31 23:19:23
回答 1查看 868关注 0票数 1

我试图构建一个安卓子系统(external/tinyalsa)。我在构建系统时遇到了一个错误(error: undefined reference to '__android_log_print')。

我使用cm-14.1构建android-7.1.2_r2系统,并在external/tinyalsa/pcm.c中插入ALOGx函数以进行调试。下面是我试图构建的Android.mk文件。

代码语言:javascript
复制
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

ifeq ($(TARGET_TINY_ALSA_IGNORE_SILENCE_SIZE),true)
   LOCAL_CFLAGS += -DIGNORE_SILENCE_SIZE
endif

LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= mixer.c pcm.c
LOCAL_MODULE := libtinyalsa
LOCAL_SHARED_LIBRARIES:= liblog libcutils libutils
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_SHARED_LIBRARY)

ifeq ($(HOST_OS), linux)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= mixer.c pcm.c
LOCAL_MODULE := libtinyalsa
LOCAL_STATIC_LIBRARIES:= liblog libcutils libutils
LOCAL_CFLAGS += -Werror

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_HOST_STATIC_LIBRARY)
endif

include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= tinyplay.c
LOCAL_MODULE := tinyplay
LOCAL_SHARED_LIBRARIES:= liblog libcutils libutils libtinyalsa
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_EXECUTABLE)

ifeq ($(HOST_OS), linux)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= tinyplay.c
LOCAL_MODULE := tinyplay
LOCAL_STATIC_LIBRARIES:= liblog libcutils libutils liblog libtinyalsa
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_HOST_EXECUTABLE)
endif

include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= tinycap.c
LOCAL_MODULE := tinycap
LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= tinymix.c
LOCAL_MODULE := tinymix
LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_SRC_FILES:= tinypcminfo.c
LOCAL_MODULE := tinypcminfo
LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += -Werror

LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

include $(BUILD_EXECUTABLE)

问题是,当我没有尝试构建tinyplaytinymixertinycap时。生成失败,并出现以下错误。

代码语言:javascript
复制
external/tinyalsa/pcm.c:863: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:870: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:879: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:884: error: undefined reference to '__android_log_print'

我添加了#define LOG_TAG和头文件#include <cutils/log.h>#include <android.log.h>,但没有构建它。

(注)成功构建了libtinyalsa (甚至使用了一堆ALOGx函数!)

有什么想法吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-01 01:45:23

错误发生的原因是主机(X86)系统中没有定义x86(特别是在liblog中)

下面是故障日志

代码语言:javascript
复制
host Executable: tinyplay (/work/backup/drim/android_drim/out/host/linux-x86/obj/EXECUTABLES/tinyplay_intermediates/tinyplay)
FAILED: /bin/bash -c "prebuilts/misc/linux-x86/ccache/ccache prebuilts/clang/host/linux-x86/clang-2690385/bin/clang++             /work/backup/drim/android_drim/out/host/linux-x86/obj/EXECUTABLES/tinyplay_intermediates/tinyplay.o        -Wl,--whole-archive   -Wl,--no-whole-archive   /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/libutils.a /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/libtinyalsa_intermediates/libtinyalsa.a /work/backup/drim/android_drim/out/host/linux-x86/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a    -lc++  -Wl,-rpath-link=/work/backup/drim/android_drim/out/host/linux-x86/obj/lib -Wl,-rpath,\\\$ORIGIN/../lib64 -Wl,-rpath,\\\$ORIGIN/lib64  -L/work/backup/drim/android_drim/out/host/linux-x86/obj/lib    -m64 -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--no-undefined-version    --gcc-toolchain=prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 --sysroot prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/lib64/ -target x86_64-linux-gnu    -pie -nodefaultlibs -o /work/backup/drim/android_drim/out/host/linux-x86/obj/EXECUTABLES/tinyplay_intermediates/tinyplay   -lpthread -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc"
external/tinyalsa/pcm.c:863: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:870: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:879: error: undefined reference to '__android_log_print'
external/tinyalsa/pcm.c:884: error: undefined reference to '__android_log_print'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

如您所见,当试图构建用于主机(x86)系统的tinyplay时会发生错误。

如果您注释掉多行用于为主机系统构建点播的内容,则可以成功构建,而不会出现任何错误(请查看下面的代码片段)。

代码语言:javascript
复制
#ifeq ($(HOST_OS), linux)
#include $(CLEAR_VARS)
#LOCAL_C_INCLUDES:= external/tinyalsa/include
#LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
#LOCAL_SRC_FILES:= tinyplay.c
#LOCAL_MODULE := tinyplay
#LOCAL_STATIC_LIBRARIES:= liblog libcutils libutils liblog libtinyalsa
#LOCAL_MODULE_TAGS := optional
#LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers

#LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

#include $(BUILD_HOST_EXECUTABLE)
#endif

(注意)由于liblog是作为静态库和共享库为主机(x86 linux)系统构建的,所以x86系统的tinyplay没有正确构建仍然是很奇怪的。

无论如何,您可以简单地通过省略对tinyplay系统的编译来构建x86。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48553043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档