2016-09-29 4 views
0

シンプルな "Hello World!"私のデスクトップのhello.cという名前のcプログラム:WindowsでシンプルなプログラムをMingw GCCにリンクするには

#include <stdio.h> 

int main() { 
    printf("Hello world!\n"); 

    return 0; 
} 

次のコマンドを実行します。

  • 私はそれを事前処理:私はそれをコンパイル> hello.i
  • のcppのhello.c:のgcc -S hello.i
  • 私はそれを組み立てる:として - o hello.o hello.s

これまでのところすべて良いです。しかし、私はそれをリンクすることはできません。他のコマンドの中でも、次のように試してみました。

ld -o hello.exe hello.o 
ld -o hello.exe hello.o -lgcc 
ld -o hello.exe hello.o -nostdlib -lgcc 

何も動作しません。私は、一つ一つのケースで取得リンクエラーは以下のとおりです。

hello.o:hello.c:(.text+0x9): undefined reference to `__main' 
hello.o:hello.c:(.text+0x15): undefined reference to `puts' 

どのように私は最終的に実行可能なプログラムファイルhello.exeを作成するために、この組み立てプログラムhello.oをリンクすることができますか?私は何が欠けていますか? [Windows 8.1、Mingwバージョン0.6.2を使用しています。]事前に感謝します。

+0

? "Nothing works"はエラー状況の非常に有用な説明ではありません。 – tofro

+0

gccはコンパイラです。このコマンドは、すべての作業を実行して実行可能ファイルを生成します。私は段階的に進んでいた。今私は最後のステップで、リンカー(ld)にリンクしたいと思います。 –

+0

なぜあなたはリンクしていますか?ここにアセンブリファイルがありますか?あなたの全体的な目標は何ですか(アセンブリとCファイルをリンクするには?) – amanuel2

答えて

1

明確化の質問に対する回答は、特に有用ではない場合でも:

をファイルhello.exe -o

LD hello.o -lmsvcrt -entry = _main -subsystem =コンソールのようなものを試してみてください

あなたはそうのようなGCCを呼び出し、リンカコマンドライン標準のgccの使用を確認したい場合は、次の

最後のライン出力は、使用されなければならないものです-v

のgcc test.cの-oテスト-Wl、... `gccの-oファイルhello.exe hello.c`やるん何

+0

出力:ld:-lmsvcrtが見つかりません。私はそれがとても複雑でなければならないと信じられない。まだ探している。更新されます。 –

+1

それはとても複雑です。コンパイラのフロントエンドであるgccを使用すると、この複雑さから解放されます。 MingwはMSCランタイムを使用するように作られています。私のインストールでは、libmsvcrt.aは\ MingW \ libにあります。おそらく、あなたのディレクトリにある-Lを追加する必要があります。 – tofro

+0

コンパイラのフロントエンドがどのようにリンカを呼び出しているかを調べるには、上記の編集を参照してください。 – tofro

関連する問題