使用 cpp std::stacktrace 引发错误“stacktrace”未在此范围内声明”

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

以下是我的代码

// 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;
}

我使用以下 cli 构建 cpp

    /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);
      |                       ^~
      |   

我确信 /usr/include/c++/13/stacktrace 存在,如何修复这个错误

c++
1个回答
0
投票

我找到原因了, 我用

apt install gcc-13
安装 gcc,这个 gcc 不编译 stacktrace 模块,构建 gcc 时应该使用 --enable-libstdcxx-backtrace=yes 构建以包含 stacktrace

构建并使用我编译的 gcc 会使问题变得复杂,所以我使用 boost stacktrace 而不是 std::stracktrace

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