2009-12-23 30 views
7

Estoy usando gentoo y estoy intentando compilar un programa para controlar los bits en el puerto paralelo. Tiene esta línea en la parte superior de la misma:"#include <asm/io.h>" produce "error: asm/io.h: No existe ningún archivo o directorio"

#include <asm/io.h> 

Y cuando trato de usar gcc en él, se produce esta salida:

port.c:4:20: error: asm/io.h: No such file or directory

"localizar/asm io.h" yeilds (entre otras cosas):

/usr/src/linux-2.6.32-gentoo/arch/x86/include/asm/io.h

Así que tengo el archivo de encabezado, pero no lo está encontrando? ¿Por qué no funciona?

+1

¿No está en su ruta de inclusión predeterminada? – Earlz

Respuesta

10

No estoy seguro de si es el autor del programa o si simplemente está tratando de compilar un programa que obtuvo de alguien, pero looks like#include <asm/io.h> debe sustituirse por #include <sys/io.h>. Vea los resultados de this google search para más información.

+0

Esto funcionó perfectamente, gracias! – marcusw

+0

Me alegra ser de ayuda. –

0

Es posible que tenga que agregar la ruta. En la línea de comando gcc:

gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include ... 
0

tratar

gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include xyx 

donde xyz es el archivo que está tratando de compilar.

Esto le dice al compilador dónde buscar los archivos de inclusión. Puede tener muchas opciones -I si sus archivos de inclusión están en diferentes lugares, como este

gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include -I/usr/src/some/Dir xyx 
+0

Gracias, esto solucionó ese problema. El único problema ahora es que ese archivo extrae un montón de otros archivos, uno de los cuales (asm-generic/ioctls.h) simplemente no existe en mi disco duro ... la parte triste es que/usr/include/asm-generic/ioctl.h está presente. Typo en el encabezado tal vez? – marcusw

+0

Ver mi respuesta. Parece código muy antiguo, y tratar de hacer que funcione en un kernel Linux moderno podría ser un montón de problemas. ¿Puedo saber qué biblioteca/código es? –

+0

Es parcon, desde http://bigasterisk.com/projects/parallel. Si bien hay un binario en el sitio, no quiero usarlo porque quiero poder personalizar el programa para adaptarlo a mis necesidades.De todos modos, agregué un enlace simbólico de ioctls.h a ioctl.h en/usr/include/asm-generic, más un modificador -I/usr/src/linux/include en la línea de comandos, y ahora estoy recibiendo un montón de errores en io.h con respecto a los errores de sintaxis y las variables no definidas. Tal vez el enlace simbólico no estaba en el archivo correcto? – marcusw

0

Añadir -I/usr/src/linux-2.6.32-gentoo/arch/x86/include a su compilación línea de comando.

4

Nunca utilice el código/encabezados en /usr/include/asm. Use los encabezados en /usr/include/sys en su lugar.

Lo que está haciendo usando /usr/include/asm/ es construir su código contra una revisión específica de los encabezados del Kernel. Esto está sujeto a roturas cuando los encabezados del kernel cambian. Al vincular a la otra ubicación, se vinculará a una forma más estable de los encabezados en glibc, que se referirá a los encabezados del kernel, según sea necesario. Es por eso que hay un gran complejo de líneas #ifdef ... #endif salpicadas de todo en los encabezados.

Confía en mí, todas las herramientas que necesita para el bit-jugueteando con los puertos paralelos estará en /usr/include/sys/io.h, ya que probablemente todo lo que vamos a utilizar son directos y readb()writeb() llamadas al dispositivo apropiado /dev/lpX.

Cuestiones relacionadas