SIGINT 未在此范围内声明
SIGINT was not declared in this scope
背景
我正在尝试在 Raspberry 3 上为 Rasbian 运行 构建示例 REST api 应用程序。我使用了 cpprestsdk
。
示例包含以下头文件:
#include <condition_variable>
#include <mutex>
#include <iostream>
static std::condition_variable _condition;
static std::mutex _mutex;
namespace cfx {
class InterruptHandler {
public:
static void hookSIGINT() {
signal(SIGINT, handleUserInterrupt);
}
static void handleUserInterrupt(int signal){
if (signal == SIGINT) {
std::cout << "SIGINT trapped ..." << '\n';
_condition.notify_one();
}
}
static void waitForUserInterrupt() {
std::unique_lock<std::mutex> lock { _mutex };
_condition.wait(lock);
std::cout << "user has signaled to interrup program..." << '\n';
lock.unlock();
}
};
}
问题
在 MacOS 上编译时,没有出现问题。
然而,当在 rasbian 中编译时,我得到 error: 'SIGINT' was not declared in this scope
错误。
很明显 SIGINT
定义 - #define SIGINT 2
或类似的 - 在 rasbian 上编译时无法访问。
问题
为什么我在 rasbian 上出现此错误,但在 macOS 上却没有?是编译器找不到signal.h
吗?
我确保 CMakeLists.txt 中的 include_directories
包含所需的包含路径。
更新
手动添加 #include <csignal>
.
时的错误已解决
您还没有包含 signal.h。
您包含了一些 C++ 标准库 headers,作为对 MacOS 的副作用,这些库恰好包含 signal.h。但是,未指定会发生这种情况,因此您不能依赖它在 headers.
的不同实现中工作
尝试添加:
#include <signal.h>
在顶部。
在 Linux 上,要包含的头文件是
#include <signal.h>
在 Mac 上OS 要包含的等效头文件是
#include <csignal.h>
根据您的 OS,头文件总是会改变。不过他们应该做同样的事情
背景
我正在尝试在 Raspberry 3 上为 Rasbian 运行 构建示例 REST api 应用程序。我使用了 cpprestsdk
。
示例包含以下头文件:
#include <condition_variable>
#include <mutex>
#include <iostream>
static std::condition_variable _condition;
static std::mutex _mutex;
namespace cfx {
class InterruptHandler {
public:
static void hookSIGINT() {
signal(SIGINT, handleUserInterrupt);
}
static void handleUserInterrupt(int signal){
if (signal == SIGINT) {
std::cout << "SIGINT trapped ..." << '\n';
_condition.notify_one();
}
}
static void waitForUserInterrupt() {
std::unique_lock<std::mutex> lock { _mutex };
_condition.wait(lock);
std::cout << "user has signaled to interrup program..." << '\n';
lock.unlock();
}
};
}
问题
在 MacOS 上编译时,没有出现问题。
然而,当在 rasbian 中编译时,我得到 error: 'SIGINT' was not declared in this scope
错误。
很明显 SIGINT
定义 - #define SIGINT 2
或类似的 - 在 rasbian 上编译时无法访问。
问题
为什么我在 rasbian 上出现此错误,但在 macOS 上却没有?是编译器找不到signal.h
吗?
我确保 CMakeLists.txt 中的 include_directories
包含所需的包含路径。
更新
手动添加 #include <csignal>
.
您还没有包含 signal.h。
您包含了一些 C++ 标准库 headers,作为对 MacOS 的副作用,这些库恰好包含 signal.h。但是,未指定会发生这种情况,因此您不能依赖它在 headers.
的不同实现中工作尝试添加:
#include <signal.h>
在顶部。
在 Linux 上,要包含的头文件是
#include <signal.h>
在 Mac 上OS 要包含的等效头文件是
#include <csignal.h>
根据您的 OS,头文件总是会改变。不过他们应该做同样的事情