【发布时间】:2014-08-18 07:44:45
【问题描述】:
我正在尝试在 Eclipse 中编译一些在 Visual Studio 中可以正常编译的简单 c++ 代码。
我有以下文件(为清楚起见已重命名和简化)。 Main.cpp 中还有其他用于 main 函数等的样板代码,我已经省略了。
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;
}
因此,由于某种原因,当将声明放置在与实际引用它的文件不同的 cpp 文件中时,Eclipse 看不到该声明。为什么会这样,我该如何解决?不幸的是,将声明移至 Main.cpp 是不可能的,因为需要跨多个 cpp 文件访问 extern。
【问题讨论】:
标签: android c++ eclipse visual-studio compiler-errors