http://blog.sina.com.cn/s/blog_5532e76a0102v6ys.html
1.现象
工作中发现一个问题,c文件不能打log,说明白点,就是不能调用ALOGE ALOGD ALOGV这些函数,会报错,类似下面的错误{
}
2.解决办法
研究发现,是因为包含了头文件”syslog.h“引起的冲突,去掉就ok了。
3.原因解析
ALOE函数的实现在”system/core/include/log/log.h“文件中,实现过程如下
#ifndef ALOGE
#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
#endif
#ifndef ALOG
#define ALOG(priority, tag, ...) \
#endif
会调用到LOG_PRI,文件下半部分有LOG_PRI实现如下
#ifndef LOG_PRI
#define LOG_PRI(priority, tag, ...) \
#endif
这是正常的调用流程。
然而包含了"syslog.h"后,这个系统文件里也有对LOG_PRI的实现如下
#define LOG_PRI(x)
因为系统文件syslog.h里的实现在前,优先级高,所以优先使用了,就造成了冲突。
想使用android的LOG系统,千万不要包含”syslog.h“文件,切记!