2011-12-13 218 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中调用,而不是实际包含在其中)。
  • 从测试代码而不是可执行文件构建一个静态库。
  • 现在你应该可以运行升压单元测试而不出问题了。
相关问题