Using GCC Undefined Behavior Sanitizer
今天,我读了一篇有关GCC Undefined Behavior Sanitizer(ubsan)的文章。 但是,当我按照此处的步骤操作(将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | ||=== Build: Debug in Entangle (compiler: GNU GCC Compiler) ===| obj/Debug/EntangleApp.o||In function `EntangleApp::OnInit()':| /home/ilya/Projects/Entangle/EntangleApp.cpp|31|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|31|undefined reference to `__ubsan_handle_load_invalid_value'| /home/ilya/Projects/Entangle/EntangleApp.cpp|32|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|34|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|34|undefined reference to `__ubsan_handle_load_invalid_value'| /home/ilya/Projects/Entangle/EntangleApp.cpp|34|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|34|undefined reference to `__ubsan_handle_load_invalid_value'| /home/ilya/Projects/Entangle/EntangleApp.cpp|35|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|37|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|37|undefined reference to `__ubsan_handle_load_invalid_value'| /home/ilya/Projects/Entangle/EntangleApp.cpp|43|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|43|undefined reference to `__ubsan_handle_load_invalid_value'| /home/ilya/Projects/Entangle/EntangleApp.cpp|52|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|52|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `EntangleApp::OnCmdLineParsed(wxCmdLineParser&)':| /home/ilya/Projects/Entangle/EntangleApp.cpp|75|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `EntangleApp::OnRun()':| /home/ilya/Projects/Entangle/EntangleApp.cpp|128|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.cpp|128|undefined reference to `__ubsan_handle_load_invalid_value'| obj/Debug/EntangleApp.o||In function `wxPrivate::UntypedBufferData::~UntypedBufferData()':| /usr/include/wx-3.0/wx/buffer.h|43|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/wx-3.0/wx/buffer.h|43|undefined reference to `__ubsan_handle_load_invalid_value'| /usr/include/wx-3.0/wx/buffer.h|44|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `std::exception::exception()':| /usr/include/c++/4.9/exception|63|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `wxCriticalSectionLocker::wxCriticalSectionLocker(wxCriticalSection&)':| /usr/include/wx-3.0/wx/thread.h|305|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/wx-3.0/wx/thread.h|307|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `wxCriticalSectionLocker::~wxCriticalSectionLocker()':| /usr/include/wx-3.0/wx/thread.h|312|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o:/usr/include/wx-3.0/wx/thread.h|767|more undefined references to `__ubsan_handle_type_mismatch' follow| obj/Debug/EntangleApp.o||In function `wxThreadHelperThread::Entry()':| /usr/include/wx-3.0/wx/thread.h|775|undefined reference to `__ubsan_handle_load_invalid_value'| /usr/include/wx-3.0/wx/thread.h|776|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/wx-3.0/wx/thread.h|776|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `std::type_info::name() const':| /usr/include/c++/4.9/typeinfo|100|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/c++/4.9/typeinfo|100|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/c++/4.9/typeinfo|100|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o:/usr/include/c++/4.9/typeinfo|100|more undefined references to `__ubsan_handle_type_mismatch' follow| obj/Debug/EntangleApp.o||In function `wxObjectEventFunctor::operator()(wxEvtHandler*, wxEvent&)':| /usr/include/wx-3.0/wx/event.h|3757|undefined reference to `__ubsan_handle_add_overflow'| /usr/include/wx-3.0/wx/event.h|3757|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/wx-3.0/wx/event.h|3757|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `wxLocale::wxLocale()':| /usr/include/wx-3.0/wx/intl.h|154|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `wxAppConsoleBase::CallOnInit()':| /usr/include/wx-3.0/wx/app.h|93|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/wx-3.0/wx/app.h|93|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o:/usr/include/wx-3.0/wx/app.h|592|more undefined references to `__ubsan_handle_type_mismatch' follow| obj/Debug/EntangleApp.o||In function `wxAppBase::IsActive() const':| /usr/include/wx-3.0/wx/app.h|592|undefined reference to `__ubsan_handle_load_invalid_value'| obj/Debug/EntangleApp.o||In function `wxAppBase::SetTopWindow(wxWindow*)':| /usr/include/wx-3.0/wx/app.h|595|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `EntangleApp::EntangleApp()':| /home/ilya/Projects/Entangle/EntangleApp.h|19|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.h|19|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.h|19|undefined reference to `__ubsan_handle_type_mismatch'| /home/ilya/Projects/Entangle/EntangleApp.h|19|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o:/home/ilya/Projects/Entangle/EntangleFrame.h|32|more undefined references to `__ubsan_handle_type_mismatch' follow| obj/Debug/EntangleApp.o||In function `std::_Vector_base<unsigned long long, std::allocator<unsigned long long> >::~_Vector_base()':| /usr/include/c++/4.9/bits/stl_vector.h|161|undefined reference to `__ubsan_handle_sub_overflow'| /usr/include/c++/4.9/bits/stl_vector.h|161|undefined reference to `__ubsan_handle_type_mismatch'| obj/Debug/EntangleApp.o||In function `std::_Vector_base<unsigned long long, std::allocator<unsigned long long> >::_Vector_impl::_Vector_impl()':| /usr/include/c++/4.9/bits/stl_vector.h|87|undefined reference to `__ubsan_handle_type_mismatch'| /usr/include/c++/4.9/bits/stl_vector.h|87|undefined reference to `__ubsan_handle_type_mismatch'| ||More errors follow but not being shown.| ||Edit the max errors limit in compiler options...| ||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 23 second(s)) ===| |
我怎样才能解决这个问题?
我已经安装了
您引用的同一篇文章(在新家中看到的)已经提供了答案,但您没有注意到它……胆大的我的:
GCC recently (version 4.9) gained Undefined Behavior Sanitizer (ubsan), a run-time checker for the C and C++ languages. In order to check your program with ubsan, compile and link the program with
-fsanitize=undefined option.
我认为解决此问题的正确方法不是手动链接
当然可以,这是行得通的:我突然收到了很多未定义的参考错误,在放弃并且几个月没有使用它之后,yugr的回答在正确的方向指出了我:我只是将