2012-06-13 6 views
0

성가신 링커 오류로 인해 문제가 발생했으며 해결 방법을 찾을 수있는 정보를 제공해 주셔서 감사합니다.링커 오류를 해결하는 데 도움이 필요합니다. LNK2001 visual studio 2010

오류를 이해하는 방식으로 링커에서 클래스 'BFStream'에서 'read'라는 함수의 구현을 찾는 데 문제가 있습니다. 코드에는 BFStream 클래스의 헤더가 포함됩니다. QRFound.dll에서 내 보낸 함수를받는 가져 오기 라이브러리 QRFound.lib가 있습니다. dll과 lib는 모두 파일 시스템의 lib 디렉토리에 있습니다. lib 디렉토리는 프로젝트 등록 정보의 VC++ 디렉토리 -> 라이브러리 디렉토리와 링커 -> 추가 라이브러리 디렉토리의 두 위치에 제공됩니다. QRFound.lib는 링커 -> 입력 -> 추가 종속성에 지정되며 목록의 첫 번째 항목입니다.

QRFound.dll에는 종속성 워커를 사용하여 BFStream :: read 구현이 포함되어 있다는 것을 알고 있습니다. [email protected]@@[email protected]

링커 오류는 다음과 같습니다 : 그러나 C++ 장식 나를 의심이 링커 오류가 약간 다릅니다

1>  Creating library C:\MyProj\Debug\MyDisplay.lib and object C:\MyProj\Debug\MyDisplay.exp 
1>MyCmdReceiver.obj : error LNK2001: unresolved external symbol "public: bool __thiscall BFStream::read(char *,__int64)" ([email protected]@@[email protected]) 
+1

QRFound.dll의 출처는 무엇입니까? 다른 C++ 컴파일러로 빌드 된 것일 수 있으며, 일반적으로 C++ 인터페이스를 DLL에서 내보내는 것은 끔찍한 생각입니다. C 인터페이스를 사용하거나 COM을 대신 사용합니다. –

답변

3

생산 :

Undecoration of :- "[email protected]@@[email protected]" 
is :- "public: bool __thiscall BFStream::read(char *,int)" 

그래서, 그래, 마지막 인수에 분명히 불일치, __int64int 일치하지 않습니다. 메소드의 실제 선언을 게시하지 않았으므로이 불일치가 어떻게 발생했는지 알맞은 추측을 할 수 없습니다. 나는 이것이 어떤 종류의 매크로 스프 문제라고 생각한다.

+0

이 도구에 대해 몰랐습니다. 감사! –

+0

'bool read (char * s, streamsize n)'여기서 streamsize는 ... – kevincw01

+0

은 streamize가 iosfwd에서 패배 한 것으로 보이며, VS 헤더는'typedef _Longlong streamsize;'로 정의되어 있으므로 32 비트를 지정해야한다고 생각합니다. 어딘가에서 나는 32 비트 플랫폼을 사용하고있다. 그게 어디로 갈지 확신하지 못합니다 ... – kevincw01

0

난 당신이 다른 컴파일러로 만든 DLL을 호출하고 생각한다.

DLL 소스가있는 경우 현재 컴파일러로 빌드하십시오. 이름 변환이 일관되고 문제를 해결할 수 있어야합니다.

DLL에 대한 소스가없는 경우 DLL에 COM 인터페이스가 있는지 확인하십시오. 당신의 기호에 undname.exe 유틸리티를 실행

+0

불행히도 소스 또는 COM 인터페이스가 없습니다. – kevincw01

관련 문제