rai*_*san 2 makefile cmake c++11 raspbian cpprest-sdk
背景
我正在尝试为在 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();
}
};
}
Run Code Online (Sandbox Code Playgroud)
问题
在 MacOS 上编译时,没有出现任何问题。
但是,在 rasbian 中编译时,error: 'SIGINT' was not declared in this scope出现错误。
很明显,在 rasbian 上编译时无法达到SIGINT定义 -#define SIGINT 2或类似的 - 。
题
为什么我在 rasbian 上收到这个错误,而在 macOS 上没有?是因为编译器找不到signal.h吗?
我确保include_directories在 CMakeLists.txt 中包含必需的包含路径。
更新
当我手动添加#include <csignal>.
您还没有包含 signal.h。
您包含了一些 C++ 标准库头文件,作为对 MacOS 的副作用,这些头文件碰巧包含了 signal.h。但是,这并未指定发生,因此您不能依赖它在这些标头的不同实现中工作。
尝试添加:
#include <signal.h>
Run Code Online (Sandbox Code Playgroud)
在顶部。