ASan & MSV C: несколько определенных символов - PullRequest
0 голосов
/ 16 января 2020

При компиляции моего проекта с включенным Address Sanitizer (/fsanitize=address) это приводит к ошибке компоновщика

uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_new_delete.cc.obj)
uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_new_delete.cc.obj)
uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_new_delete.cc.obj)
uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_new_delete.cc.obj)

Я прочитал эту статью поддержки от Microsoft о похожей проблеме, но не смог решить мой с помощью него. Добавление uafxcw.lib к игнорируемым библиотекам по умолчанию и повторное добавление его в качестве дополнительной зависимости не решает проблему. Очевидно, что полное игнорирование uafxcw.lib приводит к отсутствию символов. Насколько я понимаю, мне нужны версии new и delete от clang_rt.asan_cxx-i386.lib, иначе ASan не сможет обнаружить ошибки.

Я также не до конца понимаю, как определить проблемный модуль из вывод /verbose:lib.

Как я могу исправить ошибку компоновщика?

# EDIT #

Он успешно связывается, если я переключаю свои проекты на используйте MF C из DLL вместо статического связывания.

Project Properties > Configuration Properties > Advanced > Use of MFC > Use MFC in a Shared DLL

и

Project Properties > C/C++ > Code Generation > Runtime Library > Multi-threaded DLL (/MD)

Однако это только Обходной путь не реальное решение.

...