我仍然想使用 gcc std::stacktrace,所以我用
./configure --enable-libstdcxx-backtrace=yes
构建了自己的 gcc
以下是我的代码
/home/roroco/Dropbox/cpp/cpp-global-deps/gcc-13.2.0/dist/bin/g++ -std=c++23 -I/home/roroco/Dropbox/cpp/cpp-global-deps/gcc-13.2.0/dist/include/c++/13.2.0 -D_GLIBCXX_HAVE_STACKTRACE -Lbacktrace -o /tmp/t /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp
它引发错误:
~/Dropbox/cpp/cpp_lib/draft/draft $ /bin/bash /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_gpp_cli.sh
/tmp/ccr6jSwc.o: In function `std::stacktrace_entry::_S_init()':
test_out_backtrace.cpp:(.text._ZNSt16stacktrace_entry7_S_initEv[_ZNSt16stacktrace_entry7_S_initEv]+0x45): undefined reference to `__glibcxx_backtrace_create_state'
/tmp/ccr6jSwc.o: In function `std::stacktrace_entry::_M_get_info(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int*) const':
test_out_backtrace.cpp:(.text._ZNKSt16stacktrace_entry11_M_get_infoEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_Pi[_ZNKSt16stacktrace_entry11_M_get_infoEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_Pi]+0x80): undefined reference to `__glibcxx_backtrace_pcinfo'
test_out_backtrace.cpp:(.text._ZNKSt16stacktrace_entry11_M_get_infoEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_Pi[_ZNKSt16stacktrace_entry11_M_get_infoEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_Pi]+0xe5): undefined reference to `__glibcxx_backtrace_syminfo'
/tmp/ccr6jSwc.o: In function `std::basic_stacktrace<std::allocator<std::stacktrace_entry> >::current(std::allocator<std::stacktrace_entry> const&)':
test_out_backtrace.cpp:(.text._ZNSt16basic_stacktraceISaISt16stacktrace_entryEE7currentERKS1_[_ZNSt16basic_stacktraceISaISt16stacktrace_entryEE7currentERKS1_]+0x70): undefined reference to `__glibcxx_backtrace_simple'
我很困惑,我已经设置了 -Lbacktrace 但它仍然引发回溯相对错误,我想我在 gcc 构建时错过了一些选项,如何修复它
我找到相关问题解决方案,但是这个解决方案指导我使用 boost stacktrace 而不是 std::stacktrace,我希望使用 gcc std::stacktrace 显示 backtrace 方法名称和行号
它需要构建标志
-std=gnu++23
或链接标志 -lstdc++_libbacktrace
。