我在构建解决方案时遇到了LNK2001问题。
该解决方案有3个项目,其中一个项目只是一个返回0的主项目,所以我将其排除在问题之外。
一个项目( SerialPort )是实现类(SerialPort
)的.lib,而另一个( SerialHost )只是创建一个{ {1}}。
我认为问题出现在 SerialHost 的项目设置中。这是 SerialHost 项目代码:
SerialPort
建筑产量:
main.obj:错误LNK2001:未解析的外部符号“public:unsigned long __thiscall SerialPort :: init(unsigned long,char const *)“ (?INIT @ @@的SerialPort @ QAEKKPBD Z)
我搜索了SO的答案,发现没有解决方案可以解决我的问题。
设置项目设置我遵循this msnd演练。
我还尝试将.lib专门添加到链接器输入中的附加依赖项。
然后我读了this SO线程,并设置选项“将wchar_t视为内置类型(属性 - > C / C ++ - >语言 - > ...)到No no didn”我认为它会起作用,因为#include "SerialPort.h"
int main (int argc, char *argv[])
{
SerialPort* serialHost = new SerialPort();
serialHost->init(PORT_HOST,"COM1");
delete serialhost;
return 0;
}
被声明为
SerialPort::init
SerialPort 项目构建正常({。1}}方法在.cpp中实现。
我刚开始在VS中使用自己的静态库,所以我可能会在这里做一些基本的错误。
提前感谢您的帮助!
其他信息:
我尝试评论DWORD init (DWORD portType, LPCTSTR portName);
并使用其他方法,它构建得很好!这段代码:
init
SerialHost 中的只会在init
中产生错误 - 如果我发表评论int main (int argc, char *argv[])
{
SerialPort* serialHost = new SerialPort();
serialHost->init(PORT_HOST,"COM1");
serialHost->runTerminal();
return 0;
}
,则不会出现链接错误。
这是SerialPort的实现
init
答案 0 :(得分:0)
这看起来像SerialHost没有链接SerialPort。在VS 2008中,您可以通过转到Project>来实现这一目标。 SerialHost的项目依赖项和make SerialHost依赖于SerialPort。
假设SerialPort项目实际上包含SerialPort :: init()的定义。
答案 1 :(得分:0)
问题出在SerialPort::init(unsigned long,char const *)" (?init@SerialPort@@QAEKKPBD@Z)
类型LPCTSTR
是char const*
而不是const char*
,正如我预期的那样。
因此将"COM1"
参数传递给init
会导致错误!
我使用了LPCSTR
,一切正常。我读了一些more,他们认为是同样的事情......然后我尝试将我的LPCSTR
(const char*
)参数投射到LPCTSTR
(char const*
)并且它也工作了。
如果它们应该是相同的话,我仍然希望能够解释为什么会发生这种情况,所以我现在不接受我自己的答案!
谢谢!