2014-01-29 4 views
0

cl 컴파일러와 LINK을 사용하여 코드를 연결합니다. 다음 샘플 코드에서는 매우 이상한 링커가 나타납니다. 이상한 링커 오류

//main.cpp 
int main() 
{ 
    Test(); 
} 

void Test() 
{ 
} 

//test.cpp 
void Test3(); 
void Test2() 
{ 
    Test3(); 
} 

내가 Test.cpp에와 MAIN.CPP를 컴파일

는, 그것은 나에게 실제로 연결 안 Test3 정의하는 것을 링커 오류를 제공합니다. 내 makefile에서 test.cpp를 제거하면 문제없이 컴파일되고 링크됩니다.

저는 skia 라이브러리를 사용하고 있습니다. 이 문제는 skia 라이브러리 및 일부 링크 옵션 불일치로 인한 것일 수 있습니까?

컴파일러 옵션 : /c /W4 /nologo /WL /Gr /GF /GA /Gy /GR- /vmb /EHsc /D_UNICODE /DUNICODE /D_CRT_SECURE_NO_WARNINGS /D_CRT_NON_CONFORMING_SWPRINTFS /DWIN32 /D_WIN32 /MT /Z7 /O2 /GS- /Oi

링커 옵션 : LINK skia_core.lib skia_utils.lib skia_effects.lib skia_images.lib skia_opts.lib skia_opts_ssse3.lib skia_ports.lib skia_sfnt.lib skia_skgpu.lib /INCREMENTAL:NO /NOLOGO /OPT:REF /IGNORE:4098 /IGNORE:4089 /SUBSYSTEM:WINDOWS /FIXED:NO /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:comdlg32.lib /NODEFAULTLIB:version.lib /NODEFAULTLIB:mpr.lib /NODEFAULTLIB:rasapi32.lib /DEFAULTLIB:winmm.lib /NODEFAULTLIB:winspool.lib /NODEFAULTLIB:vfw32.lib /NODEFAULTLIB:secur32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:sensapi.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:wininet.lib /NODEFAULTLIB:wsock32.lib /NODEFAULTLIB:odbc32.lib /NODEFAULTLIB:odbccp32.lib /NODEFAULTLIB:htmlhelp.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:libc.lib unicows.lib kernel32.lib user32.lib winspool.lib gdi32.lib Rpcrt4.lib netapi32.lib wininet.lib wsock32.lib odbc32.lib odbccp32.lib htmlhelp.lib comctl32.lib advapi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib DbgHelp.lib shlwapi.lib mstask.lib taskschd.lib psapi.lib crypt32.lib /VERSION:1.0 skia_core.lib skia_utils.lib skia_effects.lib skia_images.lib skia_opts.lib skia_opts_ssse3.lib skia_ports.lib skia_sfnt.lib skia_skgpu.lib /MAP /DEBUG /OPT:REF /NODEFAULTLIB:LIBCMTD.LIB psapi.lib crypt32.lib usp10.lib Opengl32.lib Gdiplus.lib /RELEASE /OUT:test.exe

링커 오류 메시지 : LNK2019: unresolved external symbol "void __fastcall Test3(void)" ([email protected]@YIXXZ) referenced in function "void __fastcall Test2(void)" ([email protected]@YIXXZ)

내 컴파일러 링커 옵션

는 다음과 같습니다
+0

정확하고 완전한 링커 오류 메시지를 보내주십시오. –

+0

@KitFisto : 편집을 참조하십시오. – doptimusprime

답변

1

Function Test3은 방금 선언되었지만 정의되지 않았습니다. 당신은 그것에 대한 몇 가지 코드를 작성해야합니다.

Test2가 호출되지 않았기 때문에 링커가 Test2에서 호출 되더라도 Test3이 필요하지 않음을 감지 할 것으로 예상합니다. 표준에서 보장되지 않으므로 당연시 할 수 없습니다.

+0

main에서 코드 실행을 참조하십시오. 불필요한 코드 제거로 인해 링크되지 않아야하므로 링커 오류가 없어야합니다. – doptimusprime

+0

@dbasic "죽은 코드 제거로 인해 연결되지 않아야합니다."그것에 대한 참조가 있습니까? –

+0

@LuchianGrigore : 여기/OPT : REF를 참조하십시오. http://msdn.microsoft.com/en-us/library/bxwfs976.aspx – doptimusprime