- ベストアンサー
LIBCMT.LIBをリンクしてコンパイルすると警告が。
LINK : warning LNK4098: defaultlib 'LIBC' conflicts with use of other libs; use /NODEFAULTLIB:library というのがでるんですけど、もともとリンクしているLIBCというライブラリ?と、関数がかぶってしまっているためなんでしょうか。 /NODEFAULTLIBオプションを使え?みたいなことを言ってますが、 cl /? で調べてもそんなオプションありませんし。 この場合の解決法のご教授をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
コマンドラインを書いてもらえると問題が特定しやすいです。 ちなみに、/NODEFAULTLIBは以下のように指定します。 cl main.cpp other.lib /MT /link /NODEFAULTLIB:libc.lib
その他の回答 (1)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
もしVisual C++の統合環境を使用しているのであれば、そのエラーメッセージをクリックしてから[F1]を押すとエラーメッセージに関する解説が表示されるので、そちらを参照してください。 またエラーメッセージ中には「/NODEFAULTLIBを使え」という意味合いのことが書かれていますが、これは「その競合するライブラリを使う必要があるのならそうせよ」という意味です。 ライブラリの使用が競合する原因はたいていライブラリの指定方法の間違いなので、/NODEFAULTLIBでエラーメッセージを抑制するのではなく、ライブラリの指定方法のほうを修正することをまず考えてください。 非標準ライブラリや対象バージョンが異なるライブラリをリンクする場合は/NODEFAULTLIBが必要になることもありますが、そうでない場合は/NODEFAULTLIBを使っても別のエラーメッセージが発生したり、実行時エラーが発生する原因になります。
お礼
Visual C++はないです・・。 すべてお金のかからないツールを使っています。 /MTが自動で/NODEFAULTLIBを指定しているのではなくて、/NODEFAULTLIBの作業自体が必要ないということですか。 今までライブラリの競合は気にしたことがなかったので勉強になりましたどうもです。
お礼
すみませんうっかり書き忘れてしまいました。 書き足しができない点でここはちょっと不便ですね・・。 cl test.c /MT これでできました。 LIBCMT.LIBは、普通のリンクではなく/MTオプションでしなければならないということは知りませんでした。 /MTはLIBC.LIBを自動でデフォルトでなくする機能まで備えているようで、/NODEFAULTLIBは今回は省略可能だったようです。 ありがとうございました。