2

MinGW&NASM(以前のDJGPP&NASM)でC++カーネルプロジェクトをコンパイルしようとしています。Cygwinも実際に試しましたが、以下の結果とまったく同じです。

  • まず、に交換し\DJGPP\binました\MinGW\bin。次のリンクエラーが発生しました:target coff-go32 not found.
  • ターゲットをelf32-i386にスワップし、取得cannot perform PE operations on non PE output file 'build/kernel.elf'しました。私の知る限り、「PE操作」を実行していないため、これは少し奇妙なエラーでした。
  • ターゲットを再度変更しpe-i386、新しいエラーが発生しましたbuild/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'

MinGWがatexit静的クラスの呼び出しを生成しているようです。DJGPPはしませんでした。カーネルは、シャットダウン中に独自のDTOR処理を行います。定義することでatexitこれが「解決」されることは承知していますが、それは現時点ではハックであり、長期的な解決策ではありません。むしろ、MinGWに既存のコードを(または最小限の)変更なしでコンパイルさせたいと思っています。

率直に言って、私はWindowsビルド環境にあまり詳しくないので、何をすべきかについてのヒントを使用できます。プロジェクト(上記の変更を除く)は、DJGPPで正常にコンパイルおよび起動されます。違いは、DJGGPとMinGWがコンパイル時のクラス宣言を処理する方法にあるようです。

編集:ついに故障し、Cygwin上にクロスコンパイラーを構築しました。すべてが現在機能しています。

4

1 に答える 1

3

フリースタンディングのクロス コンパイラをビルドする必要があります。この問題は、 OSDev Wikiで何度も参照されており、ほとんどの人は、最初にクロス コンパイラを作成することからカーネルの作成を開始することを推奨しています。

この記事では、独自のクロス コンパイラを構築するためのステップ バイ ステップのリファレンスを提供します。Windows では、MingW または Cygwin を使用してクロス コンパイラをビルドする必要がある場合があることに注意してください。

于 2011-10-18T16:41:14.443 に答える