使用我的静态库时,错误lnk2001
Error LNK2001 while using my static library
构建解决方案时我有LNK2001问题。
该解决方案有3个项目,其中一个是返回0的主要项目,因此我将其从问题中排除。
一个项目( serialport )是一个.lib,可以实现类(SerialPort
),而另一个( SerialHost )只是创建SerialPort
的实例。
我认为这个问题在 SerialHost的项目设置中的某个地方。这是 SerialHost 项目代码:
#include "SerialPort.h"
int main (int argc, char *argv[])
{
SerialPort* serialHost = new SerialPort();
serialHost->init(PORT_HOST,"COM1");
delete serialhost;
return 0;
}
和建筑物产量:
main.obj:错误lnk2001:未解决的外部符号"公共:未签名 长__ thiscall serialport :: init(未签名的长,char const *)" (?init@serialport @@ qaekkpbd@z)
我已经搜索了答案,并且没有发现解决我的问题的解决方案。
要设置项目设置,我遵循了MSND演练。
我还尝试将.lib专门添加到链接器输入中的其他依赖项。
然后,我读取了这个线程,然后将选项设置为"将wchar_t视为建筑类型(properties-> c/c -> Lanaging-> ...)仍然不起作用。我认为它会工作是因为SerialPort::init
被声明为
DWORD init (DWORD portType, LPCTSTR portName);
- 它认为错误是使用LPCTSTR类型。
serialport 项目构建确定(在.cpp中实现了init
方法)。
我才刚刚开始使用自己的静态液体在VS中使用,所以我可能在这里做一些基本错误。
预先感谢您的帮助!
附加信息:
我尝试评论init
并使用另一种方法,并且构建正常!此代码:
int main (int argc, char *argv[])
{
SerialPort* serialHost = new SerialPort();
serialHost->init(PORT_HOST,"COM1");
serialHost->runTerminal();
return 0;
}
in SerialHost 仅在init
中产生错误 - 如果我注释init
,则不会出现链接错误。
这是SerialPort的实现
// SerialPort.h
#pragma once
#include <windows.h>
#include <iostream>
#define READ_BUFFER_SIZE 1
#define PORT_BAUD_RATE CBR_9600
#define PORT_PARITY NOPARITY
#define PORT_BYTE_SIZE 8
#define PORT_STOP_BITS ONESTOPBIT
#define PORT_HOST 0
#define PORT_DEVICE 1
class SerialPort
{
public:
SerialPort (void);
virtual ~SerialPort (void);
DWORD init (DWORD portType, LPCTSTR portName);
DWORD runTerminal (void);
DWORD runDevice (void);
LPCTSTR getVersion (void);
protected:
// Port properties
HANDLE _hSerialComm;
// Buffers
DWORD _dwBytesRead;
DWORD _dwEvtCodeRecvd;
std::string _inputString;
DWORD _eventNum;
COMSTAT _portStats;
COMMCONFIG _portDefaultConfig;
DCB _portCfgDCB;
std::string _version;
DWORD configureSerialPort (LPCTSTR portName, DWORD portType);
DWORD resetPortCfg (LPCTSTR portName);
HANDLE openPort (LPCTSTR portName, DWORD accessFlags);
DWORD configureDCB (HANDLE hSerialPort);
DWORD configureCommMask (HANDLE hSerialPort);
DWORD configureTimeOuts (HANDLE hSerialPort);
DWORD clearPortIO (HANDLE hSerialPort);
VOID printPortConfig (DCB portCfgDCB, LPCTSTR portName);
VOID printPortErrors (DWORD portErrors, COMSTAT portStats);
DWORD checkCommErrors (HANDLE hSerialPort);
};
// SerialPort.cpp - just init method
DWORD SerialPort::init(DWORD portType,LPCTSTR portName)
{
_hSerialComm = NULL;
_dwBytesRead = 0;
_dwEvtCodeRecvd = 0;
_eventNum = 0;
memset(&_portStats,0,sizeof(_portStats));
memset(&_portDefaultConfig,0,sizeof(_portDefaultConfig));
memset(&_portCfgDCB,0,sizeof(_portCfgDCB));
// Configure Serial Port
configureSerialPort(portName,portType);
return 1;
}
这看起来SerialHost没有链接SerialPort。在VS 2008中,您将通过转到serialhost的项目依赖项来实现这一目标,并使SerialHost取决于SerialPort。
假设SerialPort项目实际上包含了SerialPort :: Init()的定义。
问题在SerialPort::init(unsigned long,char const *)" (?init@SerialPort@@QAEKKPBD@Z)
我预期的是,LPCTSTR
类型是char const*
而不是const char*
。
因此,将"COM1"
参数传递给init
引起了错误!
我使用了LPCSTR
,一切都很好。我读了更多,他们据说是同一件事...然后我尝试将我的 LPCSTR
( const char*
)参数施放到 LPCTSTR
( char const*
),并且也有效。
我仍然希望有一些光明,说明为什么会发生这种情况,所以我现在不会接受自己的答案!
谢谢!
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 错误 LNK2001:未解析的外部符号"private: static class Game Game::game_"
- 错误 LNK2001:VS2017 中未解析的外部符号___iob_func
- 使用外部变量会导致"unsigned char"错误LNK2001
- Dlib错误LNK2001未解析的外部符号
- VTK / ITK/ QT - 未解决的外部符号错误 (LNK2001)
- 我如何使用Bullet Physics SDK在VS2015中清除错误LNK2001
- 链接器错误(LNK2001)当库编译罚款时
- VS 错误 LNK2001:未解析的外部符号
- C++错误LNK2001:未解析的外部符号函数_main
- 使用我的静态库时,错误lnk2001
- 如何修复错误LNK2001和LNK2019
- 错误 LNK2001:未解析的外部符号 WINAPI
- C++链接器错误LNK2001和LNK1120 Winsock2 Lib
- 为什么我会收到错误LNK2001和LNK1120
- 为什么错误LNK2001:在这种情况下未解析的外部符号
- 错误 LNK2001:未解析的外部符号"__declspec(dllimport) public: class QString & __thiscall QString::operator=(clas
- 错误LNK2001:未解析的外部符号Visual C++
- 加载GLEW库时出错(错误LNK2001)
- 在VS2012的Release模式下编译时出现错误LNK2001