14

ラズベリーパイ(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を含めるのを忘れましたか?IDEとしてEclipseを使用しています。

4

1 に答える 1

33

私はそれが次のように単純だと信じています:はではなく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;
}
于 2012-10-10T18:28:31.453 に答える