Eclipse中未定义的外部引用

时间:2014-08-18 07:44:46

标签: android c++ eclipse visual-studio compiler-errors

我试图在Eclipse中编译一些简单的c ++代码,在Visual Studio中编译得很好。

我有以下文件(为了清楚起见,重命名和简化)。 Main.cpp还有其他的样板代码用于主函数等等,我已经省略了。

foo.h中

#ifndef FOO_H
#define FOO_H
extern Int foo;
#endif

Foo.cpp中

Int foo = 0;

Main.cpp的

#include "Foo.h"
void bar() {
    foo = 1;
}

当我尝试在Eclipse中编译它时,我收到以下错误(省略了长路径)

Main.o: in function bar():jni/Main.cpp:25: error: undefined reference to 'foo'
collect2: ld returned 1 exit status

如果我将鼠标悬停在Main.cpp的foo上,它会显示它的工具提示,如果我右键单击它并选择Open Declaration,它会将我带到Foo.cpp并突出显示foo声明。所以很明显找到它,但没有编译。

如果我将声明移动到Main.cpp,如下所示,那么它编译得很好。

Main.cpp的

#include "Foo.h"
Int foo = 0;
void bar() {
    foo = 1;
}

因此,出于某种原因,当Eclipse被放置在实际引用它的不同cpp文件中时,它没有看到声明。为什么会这样,我该如何解决?不幸的是,将声明移动到Main.cpp是不可能的,因为需要跨多个cpp文件访问extern。

1 个答案:

答案 0 :(得分:0)

此错误表示Foo.cpp的内容未链接到可执行文件中(可能未编译)。