2011-12-13 19 views
0

はい、さらに別のLNK 2019質問ですが、私の特定の問題の解決策を見つけることができませんでした。複数のプロジェクトを持つVS2008ソリューションでLNK2019を解決するにはどうすればよいですか?

あなたは私に完全に私を幻滅させるので、これで助けてくれることを願っています。これは、複数のプロジェクトとC++単体テストでの最初の仕事です。

背景:

  • Win32コンソールアプリケーション
  • プロジェクトA - メインアプリケーション(main.cppに、do_app.cpp、do_app.hpp)
  • プロジェクトB - プロジェクトAの昇圧ユニットテスト(do_test .cpp)
  • プロジェクトBは、プロジェクト依存関係のプロジェクトAに依存します。
  • プロジェクトAは、ビルドシーケンスの最初にコンパイルされます。
  • プロジェクトBには、プロジェクトAの追加インクルード依存関係のファイルが含まれています。
  • do_test.cppにはdo_app.hppが含まれています。私はプロジェクトをビルドするとき

、私は次のエラーを取得する:

do_test.obj : error LNK2019: unresolved external symbol "int __cdecl dummy(void)" ([email protected]@YAHXZ) referenced in function "public: void __thiscall AddTask_noTasksExistAtAll_dataFileCreated::test_method(void)" ([email protected][email protected]@QAEXXZ) 
2>D:\Documents\Trader Rick\Projects\do\Debug\do_test.exe : fatal error LNK1120: 1 unresolved externals 

int dummy()は機能do_app.hppでプロトタイプとdo_app.cppで定義されています。これはdo_test.cppによって呼び出されます。

私は

#include "do_app.cpp" 

#include "do_app.hpp" 

を交換する場合、問題が消えて、期待通り実行ファイルが実行されます。

do_test.exeをビルドしているリンカはdo_app.objファイルを見ることができません。私の質問はなぜではないのですか?私はプロジェクトBのプロジェクトプロパティを正しく設定したと思います。

アイデアみんな?

ありがとうございました。

答えて

0

OKです。これが答えまたは回避策である場合、これを知らないでください。

ユニットを実行可能ファイルでテストする場合、Boostメソドロジは別の実行可能ファイルを作成します。したがって、同じソリューションには2つの実行可能ファイルがあります。これはVSが好きではありません。

  • 解決策からテスト対象プログラムのメインエントリポイントを削除します。具体的には、main.cppを削除してください。
  • メインエントリポイントでテストするコードを別のコンパイル単位に移動します。 (これ以降、このコードを実際には含まれていないmain.cppから呼び出させてください)
  • 実行可能ファイルではなく、テスト対象のこのコードから静的ライブラリをビルドします。
  • 問題なくBoost単体テストを実行できるはずです。