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上にクロスコンパイラーを構築しました。すべてが現在機能しています。