みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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)

よろしくお願いいたします。

投稿日時 - 2008-11-23 18:54:08

QNo.4501263

すぐに回答ほしいです

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

>ただ、ldを使ってリンク方法も知っておきたいと思います。
ldでのリンクもがんばれば出来そうですが、ちと無謀っぽいです。
参考になりそうなファイルが
MinGW\lib\gcc\mingw32\3.4.2
にspecsと言う名前であります。

しかし、ldを直接呼んでリンクを成功してみたところで、
MinGWのバージョンが変われば、同じ方法は保証されないので、
gcc経由でリンクする事をお勧めします。
gccがそのあたりの仕様を吸収して、ldを内部的に呼び出しているはずですから。

投稿日時 - 2008-11-23 20:26:03

お礼

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

投稿日時 - 2008-11-23 20:34:47

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2008-11-23 19:22:42

補足

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

投稿日時 - 2008-11-23 19:27:12

ANo.1

libcはLinuxやcygwinでは標準ライブラリとして用意されていたりしますが、
MinGWにlibcはありません。
ですから、「-lc」なんてオプションは無効です。

分割コンパイルしたオプジェクトファイルをリンクするなら、
MinGWでは
gcc -o test.exe aaa.o test.o
とすればよいです。

投稿日時 - 2008-11-23 19:21:56

お礼

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

よろしくお願いいたします。

投稿日時 - 2008-11-23 19:37:09

あなたにオススメの質問