该问题特定于VS2010。我无法在一个简单的案例中重现它来给出一个 MCVE(见下文)。
有一些旧的遗留项目。它(除其他外)有 3 个 C++ 项目:
GoogleTestingFramework - 一个从和
.lib
提供功能的项目 。为使用简单而创建。GTest
GMock
OldLegacyProject - 一个旧
.exe
项目。- 这里感兴趣的实体是
Class1
和Class2
。两者都在单独的文件中,Class1.cpp
+Class1.hpp
(与 Class2 相同)。
- 这里感兴趣的实体是
OldLegacyProjectUnitTests - 一个使用和
.exe
编写单元测试的新项目。GTest
GMock
- 该项目正在引用
GoogleTestingFramework
和OldLegacyProject
使用项目引用。 - 在引用属性中,我遵循
Visual Studio 2010 中的规则,而不是从项目中自动链接静态库,因为它应该是依赖项,尤其是这部分:
- 我试图更改
Use Library Dependency Inputs
为true
,但它并没有改变有关问题的任何内容
- 我试图更改
- 该项目中的类直接使用
Class1
(Class2
因为它们是它们的单元测试)并且需要与它们.obj
的
- 该项目正在引用
当我尝试构建所有内容时,出现以下类似错误:
3>OldLegacyProjectUnitTests.obj : error LNK2019: unresolved external symbol "public: __thiscall Class1::Class1(class Class2 &)" (??0Class1@@QAE@AAVClass2@@@Z) referenced in function "private: virtual void __thiscall SimpleCase_Should_CreateNewInstance_When_Called_Test::TestBody(void)" (?TestBody@SimpleCase_Should_CreateNewInstance_When_Called_Test@@EAEXXZ)
3>OldLegacyProjectUnitTests.obj : error LNK2019: unresolved external symbol "public: __thiscall Class2::Class2(void)" (??0Class2@@QAE@XZ) referenced in function "private: virtual void __thiscall SimpleCase_Should_CreateNewInstance_When_Called_Test::TestBody(void)" (?TestBody@SimpleCase_Should_CreateNewInstance_When_Called_Test@@EAEXXZ)
3>../Debug/OldLegacyProjectUnitTests.exe : fatal error LNK1120: 2 unresolved externals
我使用指南创建了一个简单的示例:Google Test #1.b: Setup Googletest in Visual Studio,配置与上面相同,并且可以正常工作。
问题是:
- 尽管有项目参考,为什么链接器看不到这些类?
- 如何查看链接器实际“看到”的内容?(至少,哪些文件)
- 因此:如何将类提供给链接器?
如果我明确地添加了那些的路径,那么.obj
一切都会正确编译和链接。但是,这是一个非常复杂的方法,我想给那些会处理这个相对简单的指示。
我将不胜感激。