- ベストアンサー
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) よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ただ、ldを使ってリンク方法も知っておきたいと思います。 ldでのリンクもがんばれば出来そうですが、ちと無謀っぽいです。 参考になりそうなファイルが MinGW\lib\gcc\mingw32\3.4.2 にspecsと言う名前であります。 しかし、ldを直接呼んでリンクを成功してみたところで、 MinGWのバージョンが変われば、同じ方法は保証されないので、 gcc経由でリンクする事をお勧めします。 gccがそのあたりの仕様を吸収して、ldを内部的に呼び出しているはずですから。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
gcc -o test.exe aaa.o test.o じゃだめなの? -lc でlibc.a(かlibc.la)をリンクさせようとしていると思うけど、 これはldのスタイルではなかったような。
補足
やってみたらできました。ありがとうございます。 ただ、なんとなく気持ち悪いので、ldを使った方法も知っておきたいと思っています。 それとも、gccでコンパイルするときには、ldを使ってリンクする方法は一般的ではないのでしょうか。 よろしくお願いいたします。
- Yanch
- ベストアンサー率50% (114/225)
libcはLinuxやcygwinでは標準ライブラリとして用意されていたりしますが、 MinGWにlibcはありません。 ですから、「-lc」なんてオプションは無効です。 分割コンパイルしたオプジェクトファイルをリンクするなら、 MinGWでは gcc -o test.exe aaa.o test.o とすればよいです。
お礼
なるほど、libcがないんですね。これは盲点でした。 ただ、ldを使ってリンク方法も知っておきたいと思います。 (そんなことをするヤツはいない! というご意見でもけっこうです) よろしくお願いいたします。
お礼
ありがとうございます。 非常によくわかりました。ありがとうございました。<(_ _)>