質問: GoogleTestで単体テストコード作成を実施しておりますが、多数のエラーが出てしまっております。 ネットの手順に沿ったつもりなのですが、理由が分からず困っております。 対策方法をご教授願えないでしょうか。 作成手順 ---- 1googletest-release-1.7.0をDL 2zip解凍 3Win32コンソールアプリソリューション作成 4ソリューションにgtest.slnを追加。 5参照にgtest.vcprojを追加。 5テストプロジェクトのプロパティ[C/C++]-[全般]-[追加のインクルードディレクトリ]に「googletest-release-1.7.0\include」を追加。 ※ここで記載のパス相対ですが、実際はフルパスです。 6テストコードを「#include 」など入れつつ作成。 出ているエラー ------- ``` error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) は既に gtestd.lib(gtest-all.obj) で定義されています。 error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) は既に gtestd.lib(gtest-all.obj) で定義されています。 error LNK2005: "public: void __thiscall std::basic_ios >::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) は既に gtestd.lib(gtest-all.obj) で定義されています。 error LNK2005: "public: __int64 __thiscall std::ios_base::width(__int64)" (?width@ios_base@std@@QAE_J_J@Z) は既に gtestd.lib(gtest-all.obj) で定義されています。 error LNK2005: "public: __int64 __thiscall std::basic_streambuf >::sputn(char const *,__int64)" (?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z) は既に gtestd.lib(gtest-all.obj) で定義されています。 ・ ・ 文字数制限につき、省略。 ・ error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。 error LNK1120: 外部参照 1 が未解決です。 ``` 開発環境 ---- Visual Studio 2010
回答: コンパイルして最後にリンクするときに`gcc`コマンドを使用しているのではないかと思います。 C++ソースから生成された.oを含む場合は`g++`コマンドを使用してください。 ※gccを使う場合でもオプションで`-lstdc++`をつければ解決する場合もあります。自分の確認環境では無理でしたが・・・。 Windowsの話でしたね失礼しました。ちょっと調べてみたのですがVisual Studio Community 2019 (以前はexpressという名前だった無償版)だとGoogle Testのためのプロジェクトが作成できるみたいです。 自分でも試してみましたが この記事によるとプロジェクト作成時にGoogle Testプロジェクトが選べます。(プロジェクトの形式選択で下のほうにスクロールするとあります)。プロジェクトを作成すると、すぐにテストの作成を開始できますし、実行もできます。こちらを試してみるのはいかがでしょうか?Visual Studio 2017でもできるらしいですが環境がないのでわかりません。 もしかして、もっと昔のMSVSをご使用ですか?