2016-10-16 1 views
0

간단히 말해 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를 사용하여 확인)를로드한다. 링커는 심볼을 "해결 된"것으로 간주하지 않습니다. 왜?

해결할 조건에 대한 설명을 요청할 새 질문을 만듭니다.

답변

0

AFAIK,이 긴 행은 내 main.obj가 기호가있는 함수를 나타냅니다.

예, 지정한 경로에서 링커가 [email protected]@@[email protected]@B을 찾을 수 없습니다. 제대로 설치 Additional Library Path 매개 변수 및 응용 프로그램의 대상 플랫폼이

확인하여 답변 /Machine:X64

+0

감사합니다. 내 커맨드 라인은/MACHINE : X64와/LIBPATH : "the-path-to-the-lib"(어쨌든 lib가 없으면 이전 단계에서 링커가 멈 춥니 다). – Arnaud

+0

@Arnaud'/ LIBPATH'는 라이브러리 파일 자체가 아닌 디렉토리 경로 여야합니다. – Nikita

+0

예, 올바른 경로입니다. – Arnaud

관련 문제