我有一个问题。我收到错误,但不确定为什么会发生。
2>Home.obj : error LNK2019: unresolved external symbol "**void __cdecl LogAString(char *,...)**" (?LogAString@@YAXPADZZ) referenced in function "**public: static void __cdecl X::Home::HomeStart(void)**" (?HomeStart@Home@X@@SAXXZ)
2>Widget.obj : error LNK2001: unresolved external symbol "void __cdecl LogAString(char *,...)" (?LogAString@@YAXPADZZ)
2>J:\src\out.dll : fatal error LNK1120: 1 unresolved externals
这是我的代码:
日志.h
#pragma once
#include <iostream>
#include <cstdarg>
void LogAString(char* fmt, ...);
void LogAnError(char* fmt, ...);
日志.cpp
#include "Log.h"
#include <Util/String/String Formatting.h> // defines format(). Does not have any errors or issues.
void LogAString(char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
};
void LogAnError(char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
auto formatted_string = format("ERROR: %s", fmt).c_str();
LogAString(const_cast<char*>(formatted_string), ap);
va_end(ap);
};
Home.cpp(摘录)
#include "Home.h"
#include "Log.h"
namespace X {
void Home::HomeStart()
{
while (true)
{
auto number_of_widgets = Widgets::Count();
LogAString("Loading with %d widgets", number_of_widgets);
}
}
} // namespace X
我以为我已经分别在头文件和 cpp 文件中声明和定义了函数。为什么我会收到这些错误?我已经研究了几个小时了,但仍然不确定为什么会发生这种情况。在 VS 2010 上使用 VC++。
目前我没有使用任何其他外部库。编译目标是一个DLL,“out.dll”。
最佳答案
这是链接器错误,而不是编译器错误。这意味着您在代码中正确引用了头文件是正确的。事实上,您的代码已成功编译。
但是,链接器出去寻找它所指向的库中引用的函数,却空手而归。库引用在 VC++ 项目的属性表中定义。您的项目输出 Out.dll 吗?看起来链接器需要一个。我将研究链接器部分以及您的编译生成的文件。
发布有关您的构建和解决方案/项目配置的更多信息,或者如果信息不够的话,最好准确说明属性表中的内容。
关于c++ - Unresolved external symbol 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7972264/