Linux GCC-无法在C中解析符号
我有一个源文件“foo.c”,其中包括“foo1.h”和“foo2.c” foo1.hLinux GCC-无法在C中解析符号,c,linux,gcc,gnu,C,Linux,Gcc,Gnu,我有一个源文件“foo.c”,其中包括“foo1.h”和“foo2.c” foo1.h #include "pthread.h" #define MACROFOO() PTHREAD_MUTEX_INITIALIZER // Few other macros foo2.h #include "pthread.h" #define MACROFOO() PTHREAD_MUTEX_INITIALIZER // Few other macros 富科 当我编译foo.c文件时,编译器说,MA
#include "pthread.h"
#define MACROFOO() PTHREAD_MUTEX_INITIALIZER
// Few other macros
foo2.h
#include "pthread.h"
#define MACROFOO() PTHREAD_MUTEX_INITIALIZER
// Few other macros
富科
当我编译foo.c文件时,编译器说,MACROFOO无法解析MACROFOO在foo1.h和foo2.h中声明,我在foo.c中包含了这两个标题
在这些头文件中,我几乎没有其他宏,因此我必须包含这两个头文件
这里的神奇之处在于,当我右键单击源文件中的MACROFOO并按下“Go To Declaration”时,foo1.h和foo2.h都会显示出来。所以编译器基本上知道MACROFOO的声明位置
我正在使用eclipsejuno v1.5.1
我已经尝试从一个头文件中删除MACROFOO,但问题仍然存在。(不过,我不打算从任何头文件中删除MACROFOO)
有什么帮助吗?
提前感谢。语法#include
用于表示库头,#include“header.h”
用于本地用户定义的头pthread.h
很可能是指具有相同名称的POSIX线程库,而不是项目中的本地头文件
将#include“pthread.h”
更改为#include
,看看这是否解决了问题
此外,您还应始终使用标题保护以避免各种链接器错误:
#ifndef MY_HEADER_H
#define MY_HEADER_H
/* the whole contents of the header file here */
#endif /* MY_HEADER_H */
语法#include
用于表示库头,#include“header.h”
用于本地用户定义的头pthread.h
很可能是指具有相同名称的POSIX线程库,而不是项目中的本地头文件
将#include“pthread.h”
更改为#include
,看看这是否解决了问题
此外,您还应始终使用标题保护以避免各种链接器错误:
#ifndef MY_HEADER_H
#define MY_HEADER_H
/* the whole contents of the header file here */
#endif /* MY_HEADER_H */
1.包括源代码。2.如果在两个头中声明了相同的宏,那么代码就有一些非常糟糕的地方。更糟糕的是,这两个头是一个编译单元foo.cYes的一部分。我理解糟糕的编码风格,但我不想编辑头。让我粘贴我的代码。MACROFOO()是否未定义在包含的标题末尾?这绝对是需要检查的。是的,定义了MACROFOO。让我将所有输入组合起来,然后再试一次。谢谢,请准确引用编译器的错误消息。1。包括源代码。2.如果在两个头中声明了相同的宏,那么代码就有一些非常糟糕的地方。更糟糕的是,这两个头是一个编译单元foo.cYes的一部分。我理解糟糕的编码风格,但我不想编辑头。让我粘贴我的代码。MACROFOO()是否未定义在包含的标题末尾?这绝对是需要检查的。是的,定义了MACROFOO。让我将所有输入组合起来,然后再试一次。谢谢,请准确引用编译器的错误消息。