質問

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

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

これで問題がわかりました。私の質問はこれです:Windows用のGCCコンパイラディストリビューションは、このプロジェクトを自分自身に最も簡単に移植できますか?理想的には、NASMアセンブラ構文を実行でき、外部DLL(これはカーネルであるため、アクセスできません)に依存せず、Windowsの複数のバージョンで一貫して動作できるものを探しています。これを行うための最善の方法についての推奨事項と、Windows用GCCのバージョンの推奨事項を教えてください。

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

ありがとう!

役に立ちましたか?

解決

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

-f coffを渡すことになります。

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

他のヒント

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

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

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

それが完了したら、 elf32 オブジェクトファイルをビルドするようにNASMを設定します。これで準備完了です。

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

簡単なGoogle検索で x264のコンパイルに関するチュートリアルが見つかりましたMinGW 。手順の1つはMinGWでNASMをコンパイルすることです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top