■ error LNK2019を解決するには?

[Visual C++ Q & A 掲示板] [過去ログの一覧]


むきんぽ 2007/12/06(木) 08:33:30 <初心者>
超初心者です。初めてWindows XPでVisual C++ 2005 をはじめて参考書を使って
#include <iostream>
using namespace std;

int main()
{
cout << "Hello\n";

return 0;
}
を打ち込んだのですが、

リンクしています...
Sample1.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。
Sample1.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。
C:\Documents and Settings\今道又映\My Documents\Visual Studio 2005\Projects\Sample1\Debug\Sample1.exe : fatal error LNK1120: 外部参照 2 が未解決です。
ビルドログは "file://c:\Documents and Settings\今道又映\My Documents\Visual Studio 2005\Projects\Sample1\Sample1\Debug\BuildLog.htm" に保存されました。
Sample1 - エラー 3、警告 0

とでます。
他のサイトで解決法を見てたけどどうも理解できません・・
どうかご助言をお願いします・・・

επιστημη 2007/12/06(木) 09:13:51
ランタイムライブラリのリンクができてませんね。
雰囲気からしてVC++のインストールに失敗しているように思われます。

むきんぽ 2007/12/06(木) 12:12:38 <初心者>
返答ありがとうございます。
再インストールしてみたのですがやはり結果が同じです。
Visual C++ 2005 Express EditionとMicrosoft Platform SDK
for Windows Server 2003をインストールしてますがそのほかに
必要なものはありますか?
あるとしたらサイト等教えてください。よろしくお願いします。

みい 2007/12/06(木) 13:32:50
プロジェクトの種類は何を指定しているのでしょうか。

ぼーず 2007/12/06(木) 13:51:21
このサンプルならPlatform SDKすらいりませんよ。
書き込みをコピペしてやってみましたが、Visual C++ 2005 Express Editionだけで問題なくビルドできました。

関係ないとは思いつつ日本語のユーザー名でも試してみましたが大丈夫でした。

何なんでしょうね。

むきんぽ 2007/12/06(木) 14:08:46 <初心者>
全般の空のプロジェクトで、新しい項目の追加でコードの
C++ファイルを選択しました。

επιστημη 2007/12/06(木) 14:16:32
> 全般の空のプロジェクトで、新しい項目の追加でコードの
> C++ファイルを選択しました。

再現できません。ちゃんとコンパイル/リンク/実行できました。

2007/12/06(木) 14:36:35
オプション画面でディレクトリの設定をしてないのでは?

ぼーず 2007/12/06(木) 14:37:00
「Visual Studio 2005 コマンド プロンプト」で、cppファイルのディレクトリに移動してから
(もしくは、フルパスでcppファイルを指定して)
 cl /EHsc Sample1.cpp
でコンパイルしても同じエラーになりますか?

仲澤@失業者 2007/12/06(木) 15:25:13
変ですねぇ。たしか
ios_base::Init::Init(void)はヘッダにインライン
だったような気のせいがします。
リンクエラーってのが妙ですねぇ。

(ただいまVC6.0なので確証無し)

むきんぽ 2007/12/06(木) 17:04:26 <初心者>
今下記のソースコードを入力してみたらちゃんとなりました。
/* hello world program */
#include <stdio.h>

int main(void)
{
    printf("hello world!\n");

    return 0;
}
です。ただし
#include <iostream>
using namespace std;

int main()
{
cout << "Hello\n";

return 0;
}
を再入力したけれどやはりエラーが起こります。

επιστημη 2007/12/06(木) 17:15:03
現象からすると 
"C++ライブラリがリンクできない"
もしくは
"どっかヨソにあるヘッダ<iostream>を読み込んでる"

むきんぽ 2007/12/06(木) 17:25:54 <初心者>
<"C++ライブラリがリンクできない"
<"どっかヨソにあるヘッダ<iostream>を読み込んでる"
この2件についてはどういう風に解決すれば
よろしいでしょうか?

επιστημη 2007/12/06(木) 17:34:05
原因が特定できないうちはどんな解決法も"ダメ元"でしかない。

ぼーず 2007/12/06(木) 17:56:34
[ツール]-[オプション]を開いて
[プロジェクトおよびソリューション]-[VC++ディレクトリ]の
「インクルードファイル」と「ライブラリファイル」を
表示されている順番通りに列挙してもらえませんか?

むきんぽ 2007/12/06(木) 19:38:25
インクルードファイルは
C:\Program Files\Microsoft Platform SDK\Include
C:\Program Files\Microsoft Platform SDK\Include\mfc
C:\Program Files\Microsoft Platform SDK\Include\atl
C:\Program Files\Microsoft Platform SDK\Include\crt
C:\Program Files\Microsoft Platform SDK\Include\gl
$(VCInstallDir)include
$(VCInstallDir)PlatformSDK\include
$(FrameworkSDKDir)include

ライブラリファイルは
C:\Program Files\Microsoft Platform SDK\Lib
$(VCInstallDir)lib
$(VCInstallDir)PlatformSDK\lib
$(FrameworkSDKDir)lib
$(VCInstallDir)
$(VCInstallDir)lib
です。

ぼーず 2007/12/06(木) 20:02:44
C:\Program Files\Microsoft Platform SDK\Include\crt
のiostreamを使ってるからですね。
再現できました。

これを削除すればいいと思います。
そして、mfc、atl、glもいらないと思います。

むきんぽ 2007/12/06(木) 20:16:08 <初心者>
[[解決]]

成功しました!
協力してくださった方、ありがとうございました!!

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library