我试图在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。
答案 0 :(得分:0)
此错误表示Foo.cpp的内容未链接到可执行文件中(可能未编译)。