Подтвердить что ты не робот

Ошибка компиляции ARM с использованием fcntl.h: ошибка: "закрыть" не было объявлено в этой области

Я перекрестно компилирую (хост: x86 linux) для малины pi (ARM), используя

arm-bcm2708hardfp-linux-gnueabi-g++

Когда я выбираю g++, все работает отлично и компилируется. Но когда кросс-компиляция я получаю:

 error: 'close' was not declared in this scope

Это упрощенный исходный код

#include <iostream>
#include <fcntl.h>

using namespace std;
int fd;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    close(fd);
    return 0;
}

Любая идея? Я забыл включить smth? Я использую eclipse как IDE.

4b9b3361

Ответ 1

Я считаю это настолько простым, как это: close объявлен в <unistd.h>, а не <fcntl.h>. Чтобы узнать, какой заголовочный файл объявляет символ, вы всегда должны сначала проверять страницы руководства.

#include <iostream>
#include <unistd.h>  // problem solved! it compiles!

using namespace std;
int fd;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    close(fd);  // but explicitly closing fd 0 (stdin) is not a good idea anyway
    return 0;
}