3

私はカーネルの作成に取り組んでおり、プロジェクトで一緒に働いている友人が何人かいます。しばらくプロジェクトをコンパイルするために DJGPP を使用してきましたが、この方法でコンパイルするとクロスプラットフォームの互換性の問題が発生し、プロジェクトのメインの Partnet を Windows XP でコンパイルできなくなりました。(DJGPP の GCC は、Windows XP では 127 を超える引数リストに問題がありますが、Vista では同じ引数リストに問題はありません。つまり、一度だけ、Vista は XP よりも何かでうまく機能します。oO)

とにかく、DJGPP でコンパイルするためにいくつかの汚いハックを試みるよりも、DJGPP を完全に捨てて、Windows 用の GCC の別のバージョンを使用することにしました。問題は、(私の知る限り) MinGW では、コードのアセンブリ部分に NASM 構文を使用できないことです。この時点ですべてを AT&T 構文に変換するのは少し面倒です。もちろん、プロジェクトのかなり初期の段階なので可能ですが、面倒です。

だから今、あなたは問題を知っています。私の質問は次のとおりです。Windows 用のどの GCC コンパイラ ディストリビューションを使用すると、このプロジェクトをそれ自体に最も簡単に移植できますか? 理想的には、NASM アセンブラー構文を実行でき、外部 dll に依存せず (これはカーネルであり、アクセスできません)、Windows 上の複数のバージョンで一貫して動作するものを探しています。これを行うための最良の方法についての推奨事項は何ですか?また、Windows用のGCCのどのバージョンをお勧めしますか?

プロジェクトを AT&T 構文に変換する必要がある場合は、それで問題ないことに注意してください。実際には NASM を使用してそのアセンブリ ビットをアセンブルしており、有効な .o ファイルが生成されますが、MinGW は何らかの理由でそれをリンクできません。インライン アセンブリ ビット (おそらく 5 行) は、GCC で必要な AT&T 構文になっていると思います。

ありがとう!

4

3 に答える 3

2

-f オプションを使用して間違ったオブジェクト タイプを nasm に渡している可能性があります。

-f coff を渡しているに違いありません。

-f win32 を渡す必要があります。

于 2008-11-02T20:53:21.113 に答える
1

クロスコンパイラを構築します。

http://wiki.osdev.org/GCC_Cross-Compiler

これは、Windowsホストでの開発のためにDJGPPから移行したときに行ったことです。Cygwinの方法は、MSYSよりもわずかに安定しているため、お勧めします。

それが済んだら、elf32オブジェクトファイルを作成するようにNASMを設定すれば、準備は完了です。

于 2011-10-19T19:54:04.257 に答える
0

DOS用またはWindows用にコンパイルされたNASMを使用していますか?見ていませんでしたが、違いがある可能性があります。また、NASMが古すぎると、MinGWが理解できるものを生成できない可能性があります。

Googleですばやく検索すると、 MinGWでx264をコンパイルするためのチュートリアルが見つかりました。ここでの手順の1つは、MinGWでNASMをコンパイルすることです。

それができない場合は、objcopyを使用して(別の回答へのコメントで提案されているように)試すことができます。

于 2008-11-02T22:05:09.737 に答える