간단히 말해 Visual C++ 2015에서 링크 대상 .lib 파일에있는 심볼이 없다는 것에 대해 불평하는 링커 오류가 발생합니다. 긴에서부재중인 심볼 없음에 대해 불평하는 Visual C++ 링커
: CL.EXE와 명령 줄에서 일부 프로그램을 컴파일 앤 좋아하는 동안 나는 많은 오류의 첫 번째로 다음 얻을 :
main.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxApp::sm_eventTable" ([email protected]@@[email protected]@B)
AFAIK,이 긴 줄은 말한다 내 main.obj가 기호? sm_eventTable @ wxApp @@ 1UwxEventTable @@ B가 연결되어 있지만 링커가 명령 줄에서 제공 한 libs의 (긴) 목록에서이 기호를 찾을 수 없음을 나타내는 함수를 참조합니다. .
/MD 모드로 컴파일합니다. 그것이 도움이되는지 상처를 받거나 중요성이 없는지는 알 수 없습니다. 내가 함께 링크 파일의
하나는
DUMPBIN/헤더 wxmsw31u_core.lib> here.txt
다음
Version : 0
Machine : 8664 (x64)
TimeDateStamp: 56D46194 Mon Feb 29 16:19:48 2016
SizeOfData : 00000045
DLL name : wxmsw310u_core_vc140_x64.dll
Symbol name : [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
Type : data
Name type : name
Hint : 14083
Name : [email protected]@@[email protected]@B
에서를 containting 긴 파일을 제공 wxmsw31u_core.lib하고하고있다 이것은 wxmsw31u_core.lib가 "가져 오기 라이브러리"라고 추론합니다. 즉,이 lib에는 코드가 없지만 실제로 코드가 들어있는 dll 파일 wxmsw310u_core_vc140_x64.dll을 참조합니다. ?
후자 wxmsw310u_core_vc140_x64.dll 파일이 실제로 언급 sm_eventTable @ wxApp @@ 1UwxEventTable @@ 내가 검사로 B :
DUMPBIN은/수출 wxmsw310u_core_vc140_x64.dll> here2.txt
이
14084 3703 0057F008 [email protected]@@[email protected]@B = [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
했다
첫 번째 숫자는 이전 헤더의 힌트와 1을 더한 값입니다. 이게 정상이라고 생각해?
위와 같이 DLL을 확인하는 데 시간이 걸렸지 만 링크 과정에서 DLL이 필요하지 않습니다 (제작 된 .exe를 호출 할 때 필요합니다).
전체적으로 모든 것이 존재하고 연결되어 있어야하므로 여기에서 무엇이 잘못되었는지를 판단하기가 어려울 것입니다.
편집
나는 부분적으로 자신에게 libary를 컴파일하는 대신 wxWidgets에 의해 제공되는 Windows 용 컴파일 binaires를 사용하여 문제를 해결 : 지금 내 프로그램을 컴파일 할 수 있습니다 모든 잘됩니다.
글쎄, 전부는 아닙니다. 초기 질문이 남아 있습니다. 나는 obj를 lib와 exe로 연결하려고 시도했다. obj는 lib 안에 mangled name이 그대로있는 심볼을 참조하고, 링커는 obj와 lib (/ VERBOSE를 사용하여 확인)를로드한다. 링커는 심볼을 "해결 된"것으로 간주하지 않습니다. 왜?
해결할 조건에 대한 설명을 요청할 새 질문을 만듭니다.
감사합니다. 내 커맨드 라인은/MACHINE : X64와/LIBPATH : "the-path-to-the-lib"(어쨌든 lib가 없으면 이전 단계에서 링커가 멈 춥니 다). – Arnaud
@Arnaud'/ LIBPATH'는 라이브러리 파일 자체가 아닌 디렉토리 경로 여야합니다. – Nikita
예, 올바른 경로입니다. – Arnaud