如何在具有多个项目的VS2008解决方案中解析LNK2019?

时间:2011-12-13 23:41:17

标签: visual-studio-2008 linker

是的,还有另一个LNK 2019问题,但我无法找到解决我的具体问题的方法。

希望你可以帮忙解决这个问题,因为它让我完全不知所措。这是我第一次使用多个项目和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)" (?dummy@@YAHXZ) referenced in function "public: void __thiscall AddTask_noTasksExistAtAll_dataFileCreated::test_method(void)" (?test_method@AddTask_noTasksExistAtAll_dataFileCreated@@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.hpp"

#include "do_app.cpp"

然后问题消失,可执行文件按预期执行。

现在显然,构建do_test.exe的链接器无法看到do_app.obj文件。我的问题是为什么不呢?我想我已经为Project B正确设置了Project属性。

任何想法的家伙?

提前致谢

1 个答案:

答案 0 :(得分:0)

行。如果这是一个答案或解决方法,请不要知道。

当单元测试可执行文件时,Boost方法本身会创建另一个可执行文件。因此,您在同一解决方案中有2个可执行文件,VS不喜欢。

  • 从您的解决方案中删除受测试程序的主要入口点,即在我的特定情况下删除main.cpp
  • 将要在主入口点测试的代码移动到单独的编译单元。 (从现在开始,让这段代码从main.cpp调用,而不是实际包含在其中。)
  • 从此测试代码中构建一个静态库,而不是可执行文件。
  • 现在您应该能够毫无问题地运行Boost单元测试。