2011-12-13 147 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文件。我的問題是爲什麼不呢?我想我已經爲Project B設置了正確的項目屬性。

任何想法傢伙?

在此先感謝

回答

0

好的。不知道這是否是答案或解決方法。

當單元測試可執行文件時,Boost方法本身會創建另一個可執行文件。因此,您在同一個解決方案中有2個可執行文件,VS不喜歡。

  • 從您的解決方案中刪除被測程序的主入口點,即在我的特例中刪除main.cpp
  • 將您想要在主入口點測試的代碼移動到單獨的編譯單元。 (從現在開始,讓這個代碼從main.cpp中調用,而不是實際包含在其中)。
  • 從測試代碼而不是可執行文件構建一個靜態庫。
  • 現在你應該可以運行升壓單元測試而不出問題了。
相關問題