有两个头文件_stub_defs.h
///存根码 #pragma曾经 #include“random.h”
#include< stdarg.h>
和stasrg.h
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef __builtin_va_list __gnuc_va_list;
#endif
当我使用我的交叉编译器(sparc-rtems-gcc)进行编译时,两个头文件都被包含在内。然后终端告诉我:
警告:#pragma曾经过时了 stdarg.h:`__gnuc_va_list'的冲突类型
stdarg.h:先前声明`__gnuc_va_list'
显然,#include guards不起作用。这是头文件代码的问题还是交叉编译器的问题?
答案 0 :(得分:1)
包括警卫工作。你还有另一个问题。
调试此方法的最佳方法是仅运行C预处理器。对于gcc(包括交叉编译器gcc),您可以使用-E
选项。只需将其添加到编译阶段即可。您将在预处理器阶段之后获得一个C文件,而不是获取目标文件。
获取该文件,然后在那里搜索重复的定义。该文件还将具有标记,告诉编译器此定义最初来自哪个文件,以及包含嵌套时的标记。如果您遵循这些定义,您将看到两个定义的来源以及每个定义包含的文件。