使用 Visual Studio 的目标文件

Posted

技术标签:

【中文标题】使用 Visual Studio 的目标文件【英文标题】:Object files with visual studio 【发布时间】:2015-06-25 21:56:05 【问题描述】:

我有一个主文件main.cpp,其中包括myclass.h。我也有myclass.omyclass.cpp。 Visual Studio 项目仅使用文件main.cppmyclass.h.

这个编译:

#include "myclass.h"
int main()


   return 0;

这不是:

#include "myclass.h"
int main()

   myclass M;

   return 0;

这会导致链接错误 - 可能是因为 myclass.cppmyclass.o 未包含在项目中。

我宁愿只包含myclass.o,因为编译这个类是非常有问题的。 看 https://forum.qt.io/topic/8492/solved-cannot-get-quazip-test-to-work/3 如果您对我使用的是哪个库感到好奇。

我的问题: 我可以编译和使用只有头文件和目标文件的类,即完全没有 .cpp 文件吗?

谢谢!

【问题讨论】:

添加myclass.cpp到项目 【参考方案1】:

Visual Studio 生成一个 .obj 文件作为其中间格式。 gcc 和 gcc 是生成 .o 文件的文件。您可以将其包含在您的项目中,或者由于库很少有单个编译单元,您可以构建一个 .lib 文件并包含它。但请注意,编译单元必须使用与您在项目中使用的完全相同的编译器开关(例如运行时库等)进行编译。简单地从源代码编译文件通常更简单。

我们也可以讨论使用 DLL,但这似乎超出了您的问题范围,并且还引入了调用约定的复杂性。

【讨论】:

是同一个编译器。 101%。如果我包含 .o 文件,我需要 .cpp 文件吗?如果不需要它(.cpp)是否在同一个字典中,是否有问题。如何构建 .lib? 只需将CPP文件添加到项目中即可。 它们是否使用相同的编译器构建并不重要。重要的是它们编译的标准库之间的调用约定和可能的冲突。例如,您的 .obj 可能与动态运行时相关联,而您的应用程序设置为静态。我们链接了项目,您会收到非常奇怪的链接器错误。 在 Visual Studio 中构建库的最简单方法是在开始新项目时选择该选项。同样,您必须小心匹配库项目和将包含它的项目中的编译器设置。

以上是关于使用 Visual Studio 的目标文件的主要内容,如果未能解决你的问题,请参考以下文章

是否有可以将 Visual Studio 目标文件转换为 GCC 格式的工具?

在另一个项目 Visual Studio 中使用来自一个项目的目标文件

以公共文档文件夹为目标的 Visual Studio 安装项目

如何在不删除目标文件夹内容的情况下使用 Visual Studio 2008 中的“发布”功能?

Visual Studio“任何 CPU”目标是啥意思?

Visual Studio 2010 发布具有相对路径的配置文件目标位置