使用我的静态库时出错LNK2001

时间:2012-10-31 15:36:05

标签: c++ windows static-libraries lnk2001 const-char

我在构建解决方案时遇到了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
  • 它认为故障是使用LPCTSTR类型。

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

2 个答案:

答案 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)

类型LPCTSTRchar const*而不是const char*,正如我预期的那样。

因此将"COM1"参数传递给init会导致错误!

我使用了LPCSTR,一切正常。我读了一些more,他们认为是同样的事情......然后我尝试将我的LPCSTRconst char*)参数投射到LPCTSTRchar const*)并且它也工作了。

如果它们应该是相同的话,我仍然希望能够解释为什么会发生这种情况,所以我现在不接受我自己的答案!

谢谢!