我在構建解決方案時遇到了LNK2001問題。在使用我的靜態庫時出現LNK2001錯誤
該解決方案有3個項目,其中一個如果只是一個主返回0,所以我會排除它的問題。
一個項目(的SerialPort)是實現類(SerialPort
)一的.lib,而其他(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(無符號長,字符常量*)」 (?INIT @的SerialPort @@ QAEKKPBD @ Z)
我搜索的SO答案,並沒有發現任何解決方案,治好了我的問題。
設置項目設置我遵循this msnd演練。
我也嘗試在鏈接器輸入中特別添加.lib到附加依賴項。
然後我讀this SO線程,並設置選項「將wchar_t作爲內置類型(屬性 - > C/C++ - >語言 - > ...)」仍然無效。會工作,因爲SerialPort::init
被聲明爲
DWORD init (DWORD portType, LPCTSTR portName);
- 它認爲該故障是與使用LPCTSTR類型。
的的SerialPort項目建立確定(在init
方法在.cpp中實現)。
我剛剛開始在VS中使用我自己的靜態庫,所以我可能會在這裏做一些基本的錯誤。
非常感謝您的幫助!
附加信息:
我嘗試註釋掉init
和使用另一種方法,它內置就好了!此代碼:
int main (int argc, char *argv[])
{
SerialPort* serialHost = new SerialPort();
serialHost->init(PORT_HOST,"COM1");
serialHost->runTerminal();
return 0;
}
在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的代碼嗎?另外,請檢查SerialHost> Properties> Linker> General中的「鏈接庫依賴性」是否設置爲Yes。 – Angew
它設置爲是。我發現了一個額外的線索,它似乎與SerialPort的init方法有關,我將發佈代碼。 –