2012-08-28 14 views
12

io sono la compilazione incrociata (host: Linux x86) per pi greco lampone (ARM) utilizzandoARM errore di fuori di compilazione utilizzando fcntl.h: errore: 'stretta' non è stato dichiarato in questo ambito

arm-bcm2708hardfp-linux-gnueabi-g++ 

Quando scelgo g ++ funziona tutto bene e compila. Ma quando la compilazione incrociata ottengo:

error: 'close' was not declared in this scope 

Questo è il codice sorgente semplificato

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

using namespace std; 
int fd; 

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

Qualche idea? Ho dimenticato di includere smth? Sto usando eclipse come IDE.

risposta

30

Credo sia semplice come questo: close è dichiarato in <unistd.h>, non <fcntl.h>. Per scoprire quale file di intestazione dichiara un simbolo, devi sempre controllare prima le pagine man.

#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; 
} 
+0

Come si può cercare la pagina man di un file di intestazione? man unistd o man unistd.h non ha restituito nulla. – LandonZeKepitelOfGreytBritn

+0

"Per scoprire quale file di intestazione dichiara un simbolo, è necessario controllare sempre le pagine man." Ciò significa che "uomo vicino" ti dice quale file di intestazione dichiara "chiudi", "che risponde alla domanda dell'OP. * Sembra che tu * stia ponendo la * domanda * opposta: "come ottengo un elenco di tutti i simboli dichiarati in' unistd.h'? " * Quella * domanda può essere risolta tramite 'cat unistd.h'. – Quuxplusone

+0

Tuttavia, suppongo che dovrei sottolineare per completezza che [cercando "man unistd.h"] (http://google.com/?q=man+unistd.h) ti dà davvero la risposta che stai cercando . ;) – Quuxplusone

Problemi correlati