Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux GCC-无法在C中解析符号_C_Linux_Gcc_Gnu - Fatal编程技术网

Linux GCC-无法在C中解析符号

Linux 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

我有一个源文件“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文件时,编译器说,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。让我将所有输入组合起来,然后再试一次。谢谢,请准确引用编译器的错误消息。