June 14, 2009
XML
カテゴリ: カテゴリ未分類

意味不明だったエラーのメモスタティックライブラリを作成するプロジェクトをソリューションに追加したところこんなんでました。

msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::~basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >(void)" (??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ) は既に hogehoge.obj で定義されています。


・解決方法
 プロジェクトのプロパティ→C/C++→コード生成って入るとランタイムライブラリって設定項目がある。ここの内容が、メインで作っていたプログラムのプロジェクトの設定と、新しく追加した、スタティックライブラリのプロジェクトの設定が異なっていたことが原因のようだ。ってなわけで、どっちかのプロジェクトの設定に統一してやれば問題無い。
俺の場合は、メインで作っていたのがマルチスレッドデバッグ(/MTd)だったのに対し、新しくソリューションに追加したプロジェクトはマルチスレッドデバッグDLL(/MDd)となっていた。

多分、マルチスレッドデバッグはDLLの方もそうでない方も、同じ関数群が定義されているが、読み込む対象としては別物なため、#pragma onceみたいな感じのものが働かず、両方読み込んでしまうために、すでに定義されてんぞごらって怒られるのかなw

そういえば、VC6.0のプロジェクトをVC2008のプロジェクトに変換すると、マルチスレッドデバッグが選択されているが、VC2008で新しく作成するとマルチスレッドデバッグDLLが選択されてるみたいだな。
マルチスレッドデバッグDLLにしておくと、共通して使われるdllが外部から読み込まれる形になるからファイルサイズが小さくなるのは嬉しいんだけど、VC2008が入ってないPCとかだと、使用するDLL考慮して持ってかないと動かないからめんどいってのがあるよなー






お気に入りの記事を「いいね!」で応援しよう

Last updated  April 17, 2012 03:49:03 AM
コメント(529) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

×

Profile

κгοηοδ

κгοηοδ

Calendar

Comments

Lancepes@ Подробнее трипскан официальный сайт Главная [url= <small> <a href="https:…
MartaTek@ President The US president raged at NATO allies o…
MichaelClumn@ веб-сайт другие [url= <small> <a href="http://…
Waynebiz@ Вопросы о Наркологическая клиника «Мед Алко» в Москве Наркологическая клиника «Мед Алко» в Мо…
Jessemum@ Вывод из запоя в Реутове «Детокс»: полезная информация Принимаем заявки круглосуточно, уточня…

Keyword Search

▼キーワード検索


© Rakuten Group, Inc.
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: