2

GCC を使用して C プログラムをコンパイルしようとすると、まったく奇妙なエラーが発生します。私が使用しているバッチファイルは次のとおりです。

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 が失敗しますが、非常に予期しない方法で、Windows がプログラムを実行できないように見えます。これはには意味がありません。これらのコマンドをウィンドウの外で自分で実行するなど、さまざまなことを試しました。core.c のどこかが特別で、何が違うのかわかりません。私は文字通りその行をコピーし、ファイル名を変更して、失敗している他の 2 行を作成しました。

つまり、要するに、助けてください。Windows XPでDJGPPとGCCを使用しており、最後にすべてを結び付けるPythonスクリプトを使用しています。(プロジェクトが単一のソース ファイルである場合、これはすべて機能しましたが、ファイルを個別のファイルに分割しようとすると、この奇妙なエラーが発生しました。)

ありがとう。

PS: はい、バッチ ファイル使用しています。ただし、可能であればメイクファイルに進む前に、このエラーを理解したいと思います。^_^

編集:問題はWindowsではなくDJGPPにありましたが、受け入れられた答えは確かに私たちの問題でした。(Windows にはコマンド制限がないようです。) 解決策は、DJGPP の代わりに MinGW でコンパイルすることでした。これにより、問題はすぐに修正されました。みんなありがとう!

4

3 に答える 3

5

機能する行は 126 文字の長さで、他の行は 130 文字と 136 文字の長さです。問題は、127 文字の制限があることです。これを回避する方法はわかりませんが、おそらくmakeで回避できますか?...

于 2008-10-19T03:14:05.963 に答える
0

-v を gcc コマンド ラインに追加します。gcc は実際にはドライバーであり、他のいくつかの補助プログラム (伝統的に、プリプロセッサー、コンパイラー、およびアセンブラー) を実行します。-v は、実行中のコマンドラインを表示し、冗長モードも有効にします。これにより、どこが失敗しているかがわかります。

于 2008-10-19T03:16:10.577 に答える
0

前述のように、DJGPP make (または Bash) または単純な応答ファイルでさえこの問題を解決できるため、問題ではありません。DJGPP は、それが機能する限り、まだ十分に優れています。(PS ELF ポートまたは Japheth の HX mod も参照してください。)

于 2010-06-10T10:31:23.110 に答える