使用 std::backtrace 构建 cpp 代码引发错误“对 `__glibcxx_backtrace_create_state 的未定义引用”

问题描述 投票:0回答:1

我仍然想使用 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 方法名称和行号

c++ linux gcc
1个回答
0
投票

它需要构建标志

-std=gnu++23
或链接标志
-lstdc++_libbacktrace

© www.soinside.com 2019 - 2024. All rights reserved.