我有一个包含2个项目的Visual Studio解决方案:主项目和测试(通过googletest)。在主项目中,我有myclass.cpp和myclass.h文件。当我尝试编译测试项目时,当我在test.cpp文件中包含“myclass.h”时,会出现一堆LNK2019错误,但如果我包含“myclass.cpp”,一切正常。这是正常的吗?据我所知,不推荐包含.cpp文件,一般都可以避免。有什么建议吗?
答案 0 :(得分:2)
这很正常。如果您有2个项目,则会生成2个二进制文件。
不要包含cpp文件。
相反,将二进制文件链接在一起。
主项目 - 生成.lib
个文件以及.dll
或.exe
。
测试项目 - 包含来自main
的标头。您需要在测试项目的其他依赖项中添加main生成的.lib
。项目设置中的某处 - 链接器选项 - 附加依赖项。
您可以从单个项目生成两个 .exe和.lib文件。要执行此操作,请设置:
Linker -> General -> Output File
中的Linker -> Advanced -> Import Library
您可能还需要在.exe项目中使用__declspec( dllexport )
标记导出的函数(请参阅docs),否则编译器将不会生成.lib文件。
答案 1 :(得分:1)
使用类的步骤形成另一个项目(添加标题和解算器链接器错误)
1)为了能够从另一个项目中添加标题,首先转到" Properties> c ++>一般>其他包含目录" 并添加包含标题的目录。现在,您将能够从其他项目添加该类的标题,但运行该项目仍将导致链接器错误。
2)在您用于其他项目的课程之前添加_ _declspec(dllexport)。这可以添加到该类的头文件中。这应该在函数或变量或类名之前添加。现在您将获得一个lib文件。 (如果放在错误的地方,您可以收到此警告:https://msdn.microsoft.com/en-us/library/eehkcz60.aspx)
3)"属性>链接器>其他图书馆目录" 。指定生成的lib文件的位置。
4)"属性>链接器>输入>附加依赖项“:添加lib文件的名称。