SIGINT не был объявлен в этой области - PullRequest
0 голосов
/ 12 сентября 2018

Фон

Я пытаюсь создать пример приложения REST API для Rasbian, работающего на Raspberry 3. Я использовал 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?

Я убедился, что include_directories в CMakeLists.txt содержит обязательные пути включения.

UPDATE

Ошибка устранена, когда я вручную добавил #include <csignal>.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы не включили signal.h.

Вы включаете некоторые заголовки стандартной библиотеки C ++, и, как побочный эффект для MacOS, они включают в себя signal.h. Однако это не определено, поэтому нельзя полагаться на то, что он работает в различных реализациях этих заголовков.

Попробуйте добавить:

#include <signal.h>

вверху.

...