Soy bastante nuevo para Makefiles y estoy tratando de generar un ejecutable a partir de los 3 archivos, el archivo file1.c, archivo2.c, y archivo1.h en un archivo ejecutable llamado exFile. Aquí es lo que tengo:

all: exFile
exFile: file1.o file2.o 
    gcc -Wall -g -m32 repeat.o show.o -o repeat

file1.o: file1.c file1.h
    gcc -Wall -g -m32 -S file1.c -o file1.o

file2.o: file2.c 
    gcc -Wall -g -m32 -S file2.c -o file2.o

He buscado en la web para los makefiles en este formato, pero yo me vine con las manos vacías así que me preguntaba si alguien puede ayudar. Cuando intenta compilar puedo obtener:

usr/bin/ld:file1.o:1: file format not recognized; treating as linker script

He compilado de programas mediante el uso de archivos de ensamblado, pero no estoy seguro de qué hacer con c los archivos o el archivo file1.h archivo. archivo1.c incluye archivo1.h así que tengo que vincular (creo?). Cualquier sugerencia o enlaces para una referencia sería apreciada

OriginalEl autor user695978 | 2011-04-07

2 Comentarios

  1. 6

    Tienes dos problemas con su gcc de la línea de comandos. En primer lugar, especificar el -S bandera, que hace que gcc para emitir la asamblea de código, en lugar de código objeto. En segundo lugar, usted está perdiendo el -c indicador, que indica a gcc para compilar el archivo a un archivo objeto, pero no el enlace. Si usted acaba de quitar -S y cambiar nada más, usted terminará para arriba con un programa ejecutable llamado file1.o y otra denominada file2.o, en lugar de archivos de dos objetos.

    Además de los errores, puede simplificar su makefile por el uso de patrones de reglas. Le sugiero que pruebe el siguiente:

    all: exFile
    exFile: file1.o file2.o 
        gcc -Wall -g -m32 $^ -o [email protected]
    
    %.o: %.c
        gcc -Wall -g -m32 -c $< -o [email protected]
    
    file1.o: file1.h

    O, como EmployedRussian puntos, puedes ir con algo más mínimo que aprovecha las más de las características de GNU make:

    CC=gcc
    CFLAGS=-Wall -g -m32
    
    all: exFile
    
    exFile: file1.o file2.o 
            $(LINK.c) $^ -o [email protected]
    
    file1.o: file1.h
    Este makefile es todavía bastante mala. Usted no necesita un patrón de regla, haga tiene uno igual ya integradas. También, exFile siempre estará fuera de fecha, porque son la construcción de la «repetición» en su lugar. Si usted está proporcionando un ejemplo de cómo corregir el archivo makefile, por favor, hacer un mejor trabajo para ti!
    Ruso: ¡uy, gracias por la captura de ese error tipográfico (copiado de la OP). Como para simplificar el makefile, sí, podría ser más simple, pero no estoy seguro de hacerlo, sería de ayuda que el OP de la comprensión, dado que no es el makefile de la estructura que estaba causando problemas.
    Sí que lo hizo gracias mucho a todo el mundo.

    OriginalEl autor Eric Melski

  2. 0

    La -S cambiar a gcc dice que la salida de ensamblador para esto:

    gcc -Wall -g -m32 -S file1.c -o file1.o

    Es poner un ensamblador en file1.o pero usted quiere que, presumiblemente, para compilar file1.c en código de objeto:

    gcc -Wall -g -m32 file1.c -o file1.o

    Cuando el enlazador obtiene su file1.o es confundido porque file1.o es ensamblador cuando el enlazador está a la espera de código objeto, de ahí su error.

    Para deshacerse de la -S interruptores para file1.o y file2.o.

    Gracias por la respuesta, pero no ha habido suerte…obteniendo el mismo error. Im totalmente confundido sobre esto. Voy a investigar más, yo sé que yo no soy muy lejano, probablemente, sólo algún detalle que pasé por alto.
    ¿Qué sucede si usted file file1.o para obtener el tipo de archivo?

    OriginalEl autor mu is too short

Dejar respuesta

Please enter your comment!
Please enter your name here