Я использую cl
компилятор и LINK
чтобы связать код. Я получаю очень странный компоновщик в следующем примере кода.
//main.cpp
int main ()
{
Test();
}
void Test ()
{
}
//test.cpp
void Test3 ();
void Test2 ()
{
Test3 ();
}
Когда я компилирую main.cpp с помощью test.cpp, тогда он дает мне ошибку компоновщика, что Test3
undefined, который на самом деле не должен связываться. Когда я удаляю test.cpp из моего файла makefile, он компилирует и связывает без каких-либо проблем.
Я использую библиотеку 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
компилятора: /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
: 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
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)" (?Test3@@YIXXZ) referenced in function "void __fastcall Test2(void)" (?Test2@@YIXXZ)
Функция Test3 объявлена, но не определена. Вам нужно написать код для этого.
Вы ожидаете, что компоновщик обнаружит, что Test3 не нужен, даже если он вызывается из Test2, потому что Test2 никогда не вызывается. Вы не можете считать это само собой разумеющимся, поскольку это не гарантируется стандартом.