web-dev-qa-db-ja.com

ARM fcntl.hを使用したクロスコンパイルエラー:エラー: 'close'はこのスコープで宣言されていません

Raspberry Pi(ARM)用にクロスコンパイル(ホスト:x86 linux)しています。

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として使用しています。

14
tzippy

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;
}
33
Quuxplusone