• ベストアンサー

LIBCMT.LIBをリンクしてコンパイルすると警告が。

LINK : warning LNK4098: defaultlib 'LIBC' conflicts with use of other libs; use /NODEFAULTLIB:library というのがでるんですけど、もともとリンクしているLIBCというライブラリ?と、関数がかぶってしまっているためなんでしょうか。 /NODEFAULTLIBオプションを使え?みたいなことを言ってますが、 cl /? で調べてもそんなオプションありませんし。 この場合の解決法のご教授をお願いします。

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

  • ベストアンサー
noname#30727
noname#30727
回答No.1

コマンドラインを書いてもらえると問題が特定しやすいです。 ちなみに、/NODEFAULTLIBは以下のように指定します。 cl main.cpp other.lib /MT /link /NODEFAULTLIB:libc.lib

ggaogg
質問者

お礼

すみませんうっかり書き忘れてしまいました。 書き足しができない点でここはちょっと不便ですね・・。 cl test.c /MT これでできました。 LIBCMT.LIBは、普通のリンクではなく/MTオプションでしなければならないということは知りませんでした。 /MTはLIBC.LIBを自動でデフォルトでなくする機能まで備えているようで、/NODEFAULTLIBは今回は省略可能だったようです。 ありがとうございました。

その他の回答 (1)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

もしVisual C++の統合環境を使用しているのであれば、そのエラーメッセージをクリックしてから[F1]を押すとエラーメッセージに関する解説が表示されるので、そちらを参照してください。 またエラーメッセージ中には「/NODEFAULTLIBを使え」という意味合いのことが書かれていますが、これは「その競合するライブラリを使う必要があるのならそうせよ」という意味です。 ライブラリの使用が競合する原因はたいていライブラリの指定方法の間違いなので、/NODEFAULTLIBでエラーメッセージを抑制するのではなく、ライブラリの指定方法のほうを修正することをまず考えてください。 非標準ライブラリや対象バージョンが異なるライブラリをリンクする場合は/NODEFAULTLIBが必要になることもありますが、そうでない場合は/NODEFAULTLIBを使っても別のエラーメッセージが発生したり、実行時エラーが発生する原因になります。

ggaogg
質問者

お礼

Visual C++はないです・・。 すべてお金のかからないツールを使っています。 /MTが自動で/NODEFAULTLIBを指定しているのではなくて、/NODEFAULTLIBの作業自体が必要ないということですか。 今までライブラリの競合は気にしたことがなかったので勉強になりましたどうもです。

関連するQ&A

専門家に質問してみよう