使用C++ std::stacktrace编译报错‘stacktrace未在此作用域声明’如何解决
修复std::stacktrace编译报错‘stacktrace’未在作用域中声明的问题
问题描述
编写了一段使用std::stacktrace的C++代码,已包含<stacktrace>头文件,使用以下命令编译时出现‘stacktrace’ was not declared in this scope错误,且确认/usr/include/c++/13/stacktrace文件存在,需要解决该编译问题:
g++-13 -std=c++23 -o t /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp -lstdc++_libbacktrace
代码示例
// C++ program to illustrate the use of stacktrace #include <iostream> #include <stacktrace> #include <string> using namespace std; // dummy function void foo() { // creating and initializing stacktrace object stacktrace st = stacktrace::current(); // printing stacktrace cout << to_string(st); } // driver code int main() { foo(); return 0; }
编译错误信息
/tmp $ g++-13 -std=c++23 -o t /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp -lstdc++_libbacktrace /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp: In function ‘void foo()’: /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:11:5: error: ‘stacktrace’ was not declared in this scope 11 | stacktrace st = stacktrace::current(); | ^~~~~~~~~~ /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:4:1: note: ‘std::stacktrace’ is defined in header ‘<stacktrace>’; did you forget to ‘#include <stacktrace>’? 3 | #include <stacktrace> +++ |+#include <stacktrace> 4 | #include <string> /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:14:23: error: ‘st’ was not declared in this scope; did you mean ‘std’? 14 | cout << to_string(st); | ^~ |
修复方案
GCC 13中std::stacktrace属于实验性特性,默认未启用,必须通过定义宏_GLIBCXX_USE_BACKTRACE才能让编译器识别<stacktrace>头文件中的std::stacktrace类,有两种修复方式:
方式一:编译命令添加宏定义
修改编译命令,增加-D_GLIBCXX_USE_BACKTRACE参数:
g++-13 -std=c++23 -D_GLIBCXX_USE_BACKTRACE -o t /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp -lstdc++_libbacktrace
方式二:代码中提前定义宏
在包含<stacktrace>头文件之前添加宏定义:
#define _GLIBCXX_USE_BACKTRACE #include <iostream> #include <stacktrace> #include <string> using namespace std; // dummy function void foo() { // creating and initializing stacktrace object stacktrace st = stacktrace::current(); // printing stacktrace cout << to_string(st); } // driver code int main() { foo(); return 0; }
内容的提问来源于stack exchange,提问作者chikadance
相关产品推荐
相关产品推荐

