You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:33:37