Странная ошибка компоновщика

0

Я использую 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)

  • 0
    Пожалуйста, дайте нам точное и полное сообщение об ошибке компоновщика.
  • 0
    @KitFisto: Пожалуйста, смотрите редактирование.
Теги:
linker
skia

1 ответ

1

Функция Test3 объявлена, но не определена. Вам нужно написать код для этого.

Вы ожидаете, что компоновщик обнаружит, что Test3 не нужен, даже если он вызывается из Test2, потому что Test2 никогда не вызывается. Вы не можете считать это само собой разумеющимся, поскольку это не гарантируется стандартом.

  • 0
    Пожалуйста, посмотрите выполнение кода с основного. Он не должен быть связан из-за удаления мертвого кода, и поэтому не должно быть никаких ошибок компоновщика.
  • 0
    @dbasic "Это не должно быть связано из-за удаления мертвого кода" У вас есть ссылка на это?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню