2012-10-31 5 views
0

내 솔루션을 구축하는 동안 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를 언급 경우, 연결 오류가 표시되지 않습니다.여기

는 SerialHost이하여 SerialPort 연결되지 않은 것처럼이 보인다하여 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; 
} 

답변

0

의 구현입니다. VS 2008에서는 Project> Project Dependencies for SerialHost로 이동하여 SerialHost가 SerialPort에 종속되도록합니다.

이것은 SerialPort 프로젝트에 실제로 SerialPort :: init() 정의가 포함되어 있다고 가정합니다. 내가 예상대로

+0

나는 당신이 제안한 것과 실제로 SerialHost의 종속성에 대한 체크 박스가 체크되지 않았다. (나는이 참조가 자동으로 그렇게했다고 생각했다.) 그러나 여전히 작동하지 않았다. 같은 오류! –

+0

SerialPort 코드를 게시 할 수 있습니까? 또한, SerialHost> 등록 정보> 링커> 일반의 "라이브러리 라이브러리 종속성"이 "예"로 설정되어 있는지 확인하십시오. – Angew

+0

Yes로 설정됩니다. 문제에 대한 추가적인 단서를 발견했습니다. SerialPort의 init 메소드와 관련이있는 것 같습니다. 코드를 게시합니다. –

0

문제는 유형 LPCTSTRchar const* 대신 const char*입니다 SerialPort::init(unsigned long,char const *)" ([email protected]@@[email protected])

했다.

따라서 "COM1" 매개 변수를 init으로 전달하면 오류가 발생합니다.

LPCSTR을 사용했으며 모든 것이 잘 동작했습니다. 나는 more을 읽고 그들은 아마도 같은 것을 ... 그럼 LPCSTR (const char*) 매개 변수를 LPCTSTR (char const*)으로 캐스팅 해 보았습니다.

나는 아직도 같은 일이 일어나면 어떻게 될지에 관해서는 빛을 비추는 것이 좋을 것입니다. 그래서 지금 당장 자신의 답을 받아 들일 수 없습니다!

감사합니다.

관련 문제