Domanda

Ricevo un errore totalmente bizzare mentre provo a compilare un programma C usando GCC. Ecco il file batch che sto usando:

echo Now compiling, assembling, and linking the core:
nasm -f aout -o start.o start.asm

gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o consoleio.o consoleio.c
gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o core.o core.c
gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o system.o system.c

ld -T link.ld -o core.bin start.o core.o system.o consoleio.o
echo Done!

concat.py

pause

Ecco i messaggi di errore che ricevo quando tento di eseguire questo codice. Tutti i file si trovano nella stessa directory, sì, la variabile PATH è impostata correttamente:

C:\Simple\core>build.bat

C:\Simple\core>echo Now compiling, assembling, and linking the core:
Now compiling, assembling, and linking the core:

C:\Simple\core>nasm -f aout -o start.o start.asm

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func
tions -nostdinc -fno-builtin -I./include -c -o consoleio.o consoleio.c
The system cannot execute the specified program.

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func
tions -nostdinc -fno-builtin -I./include -c -o core.o core.c

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func
tions -nostdinc -fno-builtin -I./include -c -o system.o system.c
The system cannot execute the specified program.

C:\Simple\core>ld -T link.ld -o core.bin start.o core.o system.o consoleio.o
c:/djgpp/bin/ld.exe: system.o: No such file: No such file or directory (ENOENT)

C:\Simple\core>echo Done!
Done!

C:\Simple\core>concat.py
Traceback (most recent call last):
  File "C:\Simple\core\concat.py", line 12, in <module>
    with open("core.bin", "rb") as core:
IOError: [Errno 2] No such file or directory: 'core.bin'

Ora, la cosa interessante è il comando gcc, che è il problema che sto riscontrando. (Le altre questioni sembrano essere riconducibili a questo.) Quando si compila core.c, il comando GCC funziona alla perfezione e produce un file .o come previsto. Quando si tenta di compilare system.c o consoleio.c, GCC ha esito negativo, ma in un modo molto inaspettato: sembra che Windows non possa eseguire il programma. Questo ha zero per me. Ho provato un numero qualsiasi di cose, incluso l'esecuzione di questi comandi fuori dalla finestra. Qualcosa su core.c è semplicemente speciale e non riesco a capire quale sia la differenza. Ho letteralmente copiato quella riga e modificato i nomi dei file per creare le altre due righe che non funzionano.

Quindi, in breve, AIUTO. Sto usando DJGPP e GCC su Windows XP, insieme a uno script Python alla fine che dovrebbe legare tutto insieme. (Tutto ha funzionato quando il progetto era un singolo file sorgente, ma il tentativo di dividere il file in file separati ha causato questo strano errore.)

Grazie.

PS: Sì, stiamo utilizzando un file batch e so che alcuni di voi si arrabbiano. Tuttavia, mi piacerebbe davvero capire questo errore prima di passare a un makefile, se possibile. ^ _ ^

EDIT: la risposta accettata era davvero il nostro problema, sebbene il problema fosse con DJGPP, non con Windows. (Windows non sembra avere un limite di comando.) La soluzione era compilare con MinGW invece di DJGPP, che ha risolto il problema immediatamente. Grazie ragazzi!

È stato utile?

Soluzione

La linea che funziona è lunga 126 caratteri, le altre lunghe 130 e 136 caratteri. Il problema è che esiste un limite di 127 caratteri. Non sono sicuro di come aggirare questo problema, ma forse crea lo aggirerebbe per te? ...

Altri suggerimenti

Aggiungi -v alla riga di comando di gcc. gcc è in realtà un driver, che esegue diversi altri programmi ausiliari (tradizionalmente, il preprocessore, il compilatore e l'assemblatore); -v fa mostrare le loro linee di comando mentre vengono eseguite e abilita anche la modalità dettagliata. Con questo, puoi vedere dove sta fallendo.

Come accennato, DJGPP make (o Bash) o anche un semplice file di risposta risolverebbero questo problema, quindi non è un problema. DJGPP è ancora molto buono fintanto che ciò che fa. (P.S. Vedi anche la porta ELF o il mod HX di Japheth.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top