2017-08-01 3 views
0

のMinGWを使用して、空のCプログラムをコンパイルする場合、アセンブリ出力はラインが含まれてい何ライブラリのgccアセンブリ出力に__main関数の参照を持っている

call __main 

何ライブラリこれはからですか?私はmsvcrt.dllとのリンク(ldを使用したリンク)を期待していましたが、そうでなかったので、別の場所で定義する必要があります。

他の場所でも同じ質問がありますが、実際にはこの質問の回答が含まれていないので、重複としてマークする前に確認してください。

+1

私は確かに分かりません(これはコメントであり、答えではありません)が、どちらもMinGWコンパイラと共に提供されるべき 'libgcc'または' libgcc_s'になければなりません。 MinGW環境でどのような拡張機能があるのか​​もわかりません。 'ld'を直接呼び出すのではなく、リンクするためにコンパイラドライバを使用する場合は、これらのライブラリを自動的に取得する必要があります。これは他のいくつかの理由で良い考えです。 – zwol

+0

@zwolそれは働いた!ありがとう、私が受け入れるかもしれない答えを投稿すること自由に感じなさい – rtpax

答えて

2

__mainは、MinGWコンパイラに付属のlibgccライブラリで提供する必要があります。

あなたではなく、直接ldを呼び出すよりも、あなたのプログラムをリンクする(つまり、gccコマンドラインツールです)コンパイラー・ドライバーを使用する場合は、このライブラリは自動的にリンクに追加する必要があります。コンパイラドライバを使用してリンクすることは、これといくつかの理由で推奨されています。

MinGWのバージョンと組み込みGCCのバージョンによっては、libgccまたはその一部がDLLである可能性があります.MinGWコンパイル済みの実行可能ファイルを出荷する場合はバンドルする必要があります。

関連する問題