【问题标题】:Visual Studio: Include .h or .cpp in two-project solutionVisual Studio:在双项目解决方案中包含 .h 或 .cpp
【发布时间】:2015-07-02 03:59:55
【问题描述】:

我有一个包含 2 个项目的 Visual Studio 解决方案:主项目和测试(通过 googletest)。在主项目中,我有 myclass.cpp 和 myclass.h 文件。当我尝试编译测试项目时,当我在 test.cpp 文件中包含“myclass.h”时会出现一堆 LNK2019 错误,但如果我包含“myclass.cpp”,一切正常。这正常吗?据我所知,不推荐包含 .cpp 文件,通常可以避免。有什么建议吗?

【问题讨论】:

  • 你的 main.cpp 应该在同一个项目中。你在使用预编译的头文件吗?
  • 其实我想要2个主要功能并生成2个.exe文件-一个用于我的程序,一个用于测试

标签: c++ visual-studio include projects-and-solutions


【解决方案1】:

这很正常。如果您有 2 个项目,则会生成 2 个二进制文件。

不要包含 cpp 文件

相反,将二进制文件链接在一起。

主项目 - 生成.lib 文件和.dll.exe

测试项目 - 包括来自main 的标头。您需要在测试项目的附加依赖项中添加main生成的.lib。项目设置中的某处 - 链接器选项 - 附加依赖项。


您可以从单个项目同时生成 .exe 和 .lib 文件。为此,您需要设置:

  • exeLinker -> General -> Output File
  • libLinker -> Advanced -> Import Library

您可能还需要在 .exe 项目中使用__declspec( dllexport ) 标记导出的函数(请参阅docs),否则编译器不会生成 .lib 文件。

【讨论】:

  • 感谢您的帮助,但我还有一个问题 - 我可以为我的主项目生成 .exe 和 .lib 文件吗?据我了解,生成的文件是在配置属性中指定的,只能指定一种类型的文件。
  • @YuriyPogrebnyak 是的,你可以。您在Linker -> General -> Output File 中指定exe,在Linker -> Advanced -> Import Library 中指定lib
  • 这个库文件是静态库还是导入库?如果测试项目想要调用函数并使用不是从 DLL 导出的类怎么办?
【解决方案2】:

在另一个项目中使用类的步骤(添加标头和求解器链接器错误)

1) 为了能够从另一个项目添加头文件,首先转到“属性 > c++ > 常规 > 附加包含目录” 并添加包含头文件的目录。现在您将能够从其他项目添加类的标题,但运行该项目仍然会导致链接器错误。

2) 在您用于其他项目的类之前添加 __declspec(dllexport)。这可以添加到该类的头文件中。这应该在函数或变量或类名之前添加。现在您将获得一个 lib 文件。 (如果放错地方,你会得到这个警告:https://msdn.microsoft.com/en-us/library/eehkcz60.aspx

3) “属性 > 链接器 > 附加库目录”。指定生成的 lib 文件的位置。

4) “Properties > Linker > Input > Additional Dependencies”:添加lib文件的名称。

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多