FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

LNK4098

急いで書いたのでわかりやすくはなっていません。
あしからず。


LINK : warning LNK4098: defaultlib 'LIBCMT.lib' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。


原因を理解したうえで対処したほうがいいね。

C言語やC++でよく使うprintfなどとかはコンパイルしてライブラリという形で用意されています。
必須のライブラリをランタイムライブラリと呼んでいます。
デバッグ用とかマルチスレッド用、MFCを使う場合、DLLを使う場合などでライブラリを変える必要があります。

どのライブラリとリンクするかは
VisualStudioでプロジェクトがやってくれるので大抵は気にする必要ありません。

何か別のライブラリを使いたいという場合に面倒になります。
そのライブラリがリリース用のlibcmt.libとリンクするように指示が組み込まれていて、でもデバッグしたいから自分はlibcmtd.libとリンクしたい場合に問題になります。

そのライブラリのlibcmtd.libとリンクするバージョンを用意すれば解決します。

でも、そんなのが用意できない場合が多いですよね。
そこでlibcmt.libとリンクさせなくする方法があります。

Visual Studio 2005の場合
20070728144623.png

プロジェクト選んで
右クリックでメニュー出して
プロパティを選んで
リンカの入力の特定のライブラリの無視に指定します。




ここを見つけた人にはすまないが
まとめきれていません。

googleとかみると結構みんな引っかかっているようですね。
私もよく出会いますよ。
自作ライブラリとか他人が作ったライブラリを使うとかの作業をやることがあるので。




VC2005ではシングルスレッド用がなくなっていますね。
いつからなくなったのか判りません。

シングルスレッド用とマルチスレッド用が混在する場合は
マルチスレッド用を使います。
シングルスレッド用をマルチスレッドで使うと問題を起こす可能性があります。
  1. 2007/07/28(土) 14:46:40|
  2. Win/C++
  3. | トラックバック:0
  4. | コメント:0
<<VisualStudio 2005 ウォッチの(char*)型 | ホーム | 高濃度酸素水 >>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://wclrp.blog90.fc2.com/tb.php/31-5e607861
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。