2013-10-11 7 views
7

Sto provando a compilare un programma C sulla nuova versione di ubuntu, allo scopo di mettere il programma compilato su un'altra macchina in seguito. Tuttavia, quando compilo con gcc prog.c -o prog, ottengo un errore: "errore fatale: asm/page.h: No such file or directory" Qui ci sono le intestazioni:Problemi con la compilazione del codice C su ubuntu. (#include errors)

#include <stdio.h> 
#include <errno.h> 
#include <stdlib.h> 
#include <string.h> 
#include <malloc.h> 
#include <limits.h> 
#include <signal.h> 
#include <unistd.h> 
#include <sys/uio.h> 
#include <sys/mman.h> 
#include <asm/page.h> 
#include <asm/unistd.h> 

ottengo un errore in #include. Dice errore fatale: asm/page.h: Nessun file o directory di questo tipo. Come ho detto, sto solo cercando di compilarlo. C'è un modo per me per ottenere l'intestazione mancante o qualcosa del genere? Grazie.

+0

Cosa deve fare il programma? Perché include tutto il disordine di cui sopra? Mostra molto più del tuo codice sorgente, non solo le direttive '# include'! –

risposta

4

In genere, asm/page.h esiste solo nell'albero del kernel Linux, normalmente sotto arch/<archname>/asm/page.h e deve essere utilizzato solo come codice del kernel (o dai moduli del kernel).

stdio.h e stdlib.h, da altra parte, non devono essere utilizzati nel codice del kernel. Quindi, il tuo codice sorgente originale sembra al meglio. Molto probabilmente non ha mai avuto bisogno di quello asm/page.h in primo luogo, e in realtà ha solo bisogno di qualcosa come linux/types.h (questa è una delle intestazioni inclusa da uno dei kernel asm/page.h).

4

Questi file di intestazione non sono mancanti sono stati spostati. I pacchetti di ubuntu spostato le cose e la posizione dei file di intestazione che erano in '/ usr/include/asm' sono ora in '/ usr/include/asm-generic'

Per risolvere, basta aggiungere un collegamento :

sudo ln -s /usr/include/asm-generic /usr/include/asm

... o, probabilmente, probabilmente mancano build-essential. Questo è necessario per compilare il codice in linux. installare build-essential

sudo apt-get install build-essential

Ora ricreare il collegamento corretto:

sudo ln -s /usr/include/asm-generic /usr/include/asm

build-essential dovrebbe installare una cartella/usr/include/asm-generico. Se ti manca una cartella di questo tipo, reinstallare build-essentials e verificare che la cartella esista.

La cartella/usr/include/asm-generic esiste?

Viene installato da build-essentials ma esaminandolo è una dipendenza che lo installa.

se/usr/include/asm-generic non esiste, provare a installare o reinstallare linux-libc-dev.

Questo dovrebbe creare la cartella asm-generic. In tal caso, eliminare quel vecchio collegamento e collegarlo come asm-generic.

+4

Non solo il collegamento di 'asm' a' asm-generic' sembra un vero e proprio hack sporco, non è comunque di aiuto comunque. Nella più recente Ubuntu 13.04, mentre la directory '/ usr/include/asm-generic' esiste,' page.h' non fa (e 'build-essential' e' linux-libc-dev' sono installati). – mvp

+0

Ok, ho installato build-essentials e ho creato il collegamento, ma continuo a ricevere lo stesso errore./usr/include/asm-generic esiste, ma esisteva già prima di installare build-essentials. –

Problemi correlati