• ベストアンサー

MinGWでのリンク

Widows上で、MinGwを使用してC言語でプログラミングをしようとしています。 test.c aaa.c の二つをコンパイルして、あとでldでリンクをしようとしています。 コンパイルは gcc -c test.c aaa.c で問題なくコンパイルができたのですが、リンクをしようとして ld -o test.exe aaa.o test.o -lc とすると、 ld: cannot find -lc と表示されて、リンクがうまくいきません。通常の(?)gccではこれでできると思うのですが(経験があるわけではなく、単にググっただけですが。。。)どこが間違っているのでしょうか。 OS:WinXP SP2 gcc version 3.4.2 (mingw-special) よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.3

>ただ、ldを使ってリンク方法も知っておきたいと思います。 ldでのリンクもがんばれば出来そうですが、ちと無謀っぽいです。 参考になりそうなファイルが MinGW\lib\gcc\mingw32\3.4.2 にspecsと言う名前であります。 しかし、ldを直接呼んでリンクを成功してみたところで、 MinGWのバージョンが変われば、同じ方法は保証されないので、 gcc経由でリンクする事をお勧めします。 gccがそのあたりの仕様を吸収して、ldを内部的に呼び出しているはずですから。

annyG
質問者

お礼

ありがとうございます。 非常によくわかりました。ありがとうございました。<(_ _)>

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

gcc -o test.exe aaa.o test.o じゃだめなの? -lc でlibc.a(かlibc.la)をリンクさせようとしていると思うけど、 これはldのスタイルではなかったような。

annyG
質問者

補足

やってみたらできました。ありがとうございます。 ただ、なんとなく気持ち悪いので、ldを使った方法も知っておきたいと思っています。 それとも、gccでコンパイルするときには、ldを使ってリンクする方法は一般的ではないのでしょうか。 よろしくお願いいたします。

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

libcはLinuxやcygwinでは標準ライブラリとして用意されていたりしますが、 MinGWにlibcはありません。 ですから、「-lc」なんてオプションは無効です。 分割コンパイルしたオプジェクトファイルをリンクするなら、 MinGWでは gcc -o test.exe aaa.o test.o とすればよいです。

annyG
質問者

お礼

なるほど、libcがないんですね。これは盲点でした。 ただ、ldを使ってリンク方法も知っておきたいと思います。 (そんなことをするヤツはいない! というご意見でもけっこうです) よろしくお願いいたします。

関連するQ&A