Ошибка компилятора GCC в Windows XP - PullRequest
2 голосов
/ 19 октября 2008

Я получаю совершенно странную ошибку, пытаясь скомпилировать программу на C, используя GCC. Вот командный файл, который я использую:

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

Вот сообщения об ошибках, которые я получаю при попытке запустить этот код. Все файлы находятся в одном каталоге, да, переменная PATH установлена ​​правильно:

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'

Теперь интересная вещь - это команда gcc, с которой я столкнулся. (Другие проблемы, кажется, каскадируются из этого.) При компиляции core.c команда GCC работает отлично и отлично и выдает файл .o, как и ожидалось. При попытке скомпилировать system.c или consoleio.c сбой GCC происходит, но очень неожиданным образом: кажется, что окна не могут запустить программу. Это имеет смысл ноль для меня. Я пробовал разные вещи, включая запуск этих команд за окном. Что-то в core.c просто особенное, и я не могу понять, в чем разница. Я буквально скопировал эту строку и изменил имена файлов, чтобы создать две другие строки с ошибками.

Итак, вкратце, ПОМОГИТЕ. Я использую DJGPP и GCC на Windows XP вместе со скриптом Python в конце, который должен связать все вместе. (Это все работало, когда проект представлял собой один исходный файл, но попытка разбить файл на отдельные файлы вызвала эту странную ошибку.)

Спасибо.

PS: Да, мы используем пакетный файл, и я знаю, что некоторые из вас съеживаются. Однако мне бы очень хотелось понять эту ошибку, прежде чем перейти к make-файлу, если это возможно. ^ _ ^

РЕДАКТИРОВАТЬ: Принятый ответ действительно был нашей проблемой, хотя проблема была с DJGPP, а не Windows. (Похоже, в Windows нет предела команд.) Решением было скомпилировать MinGW вместо DJGPP, что сразу решило проблему. Спасибо, ребята!

Ответы [ 3 ]

5 голосов
/ 19 октября 2008

Длина строки составляет 126 символов, длина остальных 130 и 136 символов. Проблема в том, что существует ограничение в 127 символов. Я не уверен, как обойти это, но, может быть, make обойдется вам? ...

0 голосов
/ 10 июня 2010

Как уже упоминалось, DJGPP make (или Bash) или даже простой файл ответов решит эту проблему, так что это не проблема. DJGPP все еще очень хорош, пока он делает то, что делает. (См. Также порт ELF или мод HX от Japheth.)

0 голосов
/ 19 октября 2008

Добавьте -v в командную строку gcc. На самом деле gcc - это драйвер, который запускает несколько других вспомогательных программ (традиционно, препроцессор, компилятор и ассемблер); -v позволяет отображать их командные строки во время их выполнения, а также включает подробный режим. При этом вы можете увидеть, где он терпит неудачу.

...