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

Freepage List

Shopping List

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 で定義されています。


使用しているのは、VisualC++2008ExpressEdition

・解決方法
 プロジェクトのプロパティ→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) | コメントを書く


PR

Profile

κгοηοδ

κгοηοδ

Calendar

Recent Posts

Favorite Blog

自作パソコンを作ろ… おったきーさん

Comments

 Jamespunse@ lucky jet демо счет [url= <small> <a href="https://luckyjet…
 ThomasMat@ игра gates of olympus [url= <small> <a href="https://gatesofo…
 GregoryLoK@ Оземпик 1 мг 3мл аптеки в наличии [url= <small> <a href="http://carepoint…
 Michaeldroks@ на этом сайте электрик томск Продолжение <small> <a href="https://x…
 Donnieexons@ Ниволумаб купить [url= <small> <a href="https://xn----7s…

Headline News

Keyword Search

▼キーワード検索


© Rakuten Group, Inc.