내 솔루션을 구축하는 동안 LNK2001 문제가 발생합니다.내 정적 라이브러리를 사용하는 동안 LNK2001 오류가 발생했습니다.
솔루션에는 3 개의 프로젝트가 있으며, 그 중 하나는 0을 리턴하는 메인 일 뿐이므로 문제에서 제외 할 것입니다.
하나의 프로젝트 (하여 SerialPort) 다른 (SerialHost가) 단순히 SerialPort
의 인스턴스를 생성하는 동안 클래스 (SerialPort
)를 구현하는 lib 디렉토리가있다.
내가 프로젝트의 설정 어딘가에 의 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 : 여기 SerialHost 프로젝트 코드가 진행되지 않은 외부 기호를 "공개 : 서명되지 않은 긴 __thiscall의하여 SerialPort : 초기화 (긴 부호를 , 문자의 CONST은 *) "@하여 SerialPort @@ QAEKKPBD @ Z 초기화 (?)
나는 답을 SO 검색 및 내 문제를 치료 해결책을 발견했습니다.
프로젝트 설정을 적용하려면 this msnd walkthrough를 따르십시오.
또한 필자는 특히 .lib를 링커 입력의 추가 종속성에 추가하려고 시도했습니다.
그렇다면 this SO 스레드를 읽고 "빌드 유형으로 wchar_t 처리 (속성 -> C/C++ -> 언어 -> ...)를 No로 설정하면 여전히 작동하지 않습니다. SerialPort::init
이
DWORD init (DWORD portType, LPCTSTR portName);
- 로 선언되어 있기 때문에 오류가 LPCTSTR 형의 사용이라고 생각 일 것입니다.
하여 SerialPort 프로젝트 확인을 빌드합니다 (를메서드는 .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.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> 등록 정보> 링커> 일반의 "라이브러리 라이브러리 종속성"이 "예"로 설정되어 있는지 확인하십시오. – Angew
Yes로 설정됩니다. 문제에 대한 추가적인 단서를 발견했습니다. SerialPort의 init 메소드와 관련이있는 것 같습니다. 코드를 게시합니다. –