“#Include ” causa “Errore: asm / io.h: No such file or directory”
-
21-09-2019 - |
Domanda
sto usando Gentoo e cercando di compilare un programma per controllare i bit sulla porta parallela. Ha questa linea vicino alla parte superiore di esso:
#include <asm/io.h>
E quando cerco di usare gcc su di esso, produce questo output:
port.c: 4: 20: errore: asm / io.h: Nessun file o directory
"individuare ASM / io.h" yeilds (tra le altre cose):
/usr/src/linux-2.6.32-gentoo/arch/x86/include/asm/io.h
Così ho il file di intestazione, ma non è trovarlo? Perché questo non funziona?
Soluzione
Non sono sicuro se sei l'autore del programma o si sta solo cercando di compilare un programma che hai da qualcuno, ma sembra #include <asm/io.h>
dovrebbe essere sostituito con #include <sys/io.h>
. Vedere i risultati di questa ricerca google per più informazioni.
Altri suggerimenti
Mai utilizzare i codici / intestazioni in /usr/include/asm
. Utilizzare le intestazioni in /usr/include/sys
invece.
Quello che state facendo utilizzando /usr/include/asm/
sta costruendo il proprio codice contro uno specifico la revisione degli header del kernel. Questo è soggetto a rotture quando gli header del kernel cambiano. Collegando l'altra posizione, è un collegamento a una forma più stabile delle intestazioni di glibc, che farà riferimento al header del kernel, se necessario. Ecco perché c'è un grande complesso di linee #ifdef ... #endif
pepato tutto nelle intestazioni.
Fidati di me, tutti gli strumenti necessari per il bit-giocherellare con le porte parallele saranno in /usr/include/sys/io.h
, dal momento che probabilmente tutto si sta andando ad essere utilizzando sono readb()
diretto e writeb()
chiamate al dispositivo /dev/lpX
appropriata.
Potrebbe essere necessario aggiungere il percorso. Sulla riga di comando gcc:
gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include ...
try
gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include xyx
dove xyz è il file che si sta cercando di compilare.
Questo dice al compilatore dove cercare includere i file. Si possono avere molte opzioni -I se il file include sono in luoghi diversi, come questo
gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include -I/usr/src/some/Dir xyx
Aggiungi -I / usr / src / linux-2.6.32-gentoo / arch / x86 / include alla riga di comando di compilazione.