C++ LNK2019未解析外部
我有一些测试代码: foo.hC++ LNK2019未解析外部,c++,visual-c++,C++,Visual C++,我有一些测试代码: foo.h #ifndef FOO_H #define FOO_H void Foo(int iBar); #endif FOO_H foo.cpp #include "foo.h" void Foo(int iBar) { // Do nothing... } #include "foo.h" int main() { Foo(1); return 0; } main.cpp #include "foo.h" void Foo(in
#ifndef FOO_H
#define FOO_H
void Foo(int iBar);
#endif FOO_H
foo.cpp
#include "foo.h"
void Foo(int iBar)
{
// Do nothing...
}
#include "foo.h"
int main()
{
Foo(1);
return 0;
}
main.cpp
#include "foo.h"
void Foo(int iBar)
{
// Do nothing...
}
#include "foo.h"
int main()
{
Foo(1);
return 0;
}
在VS2010中生成上述代码时,我收到一个链接器错误:
错误LNK2019:未解析的外部符号“void\uu cdecl Foo(int)”(?Foo@@YAXH@Z)在函数_main中引用
我不明白为什么我的Foo()函数在链接时无法解析。谁能给我一些关于我可能做错了什么的见解吗?因此,经过一些尝试和错误,我通过将定义代码从foo.cpp移动到foo.h,成功地构建了我的代码
无论出于何种原因,foo.cpp似乎没有与foo.obj绑定。我在log.h和log.cpp中分别声明和定义了全局日志实用程序函数,就像我在上面的测试“foo”文件中所做的一样,但是我在编译它们并将它们链接到我的程序时没有问题。我想知道我在做什么,其中一个链接没有问题,而另一个却无法识别cpp文件。你在foo.obj中链接到exe了吗?@n0rd:我使用VS2010,所以当我打开解决方案时,我在菜单中单击“构建->构建解决方案”。解决方案中的每个项目都有不同的设置,可以更改有关生成路径、依赖项声明等的设置。除了要生成可执行文件的位置之外,我还没有更改生成设置。同一项目中是否有
main.cpp
和foo.cpp
?@n0rd:Yes,提到的所有文件都在同一个项目中。是否确定Foo
函数未在Foo.cpp
中使用static
关键字定义?无论如何,运行“Visual Studio命令提示符”转到您的项目目录,然后在Debug或Release(取决于您试图构建的内容)目录下应该有foo.obj文件。运行dumpbin/symbols foo.obj
并检查a)foo
是否已导出,b)它与链接器查找的名称完全相同(在错误消息中提到)dumpbin/symbols foo.obj |查找“foo”
可能会有所帮助