使用 Visual Studio 的目标文件
Posted
技术标签:
【中文标题】使用 Visual Studio 的目标文件【英文标题】:Object files with visual studio 【发布时间】:2015-06-25 21:56:05 【问题描述】:我有一个主文件main.cpp
,其中包括myclass.h
。我也有myclass.o
和myclass.cpp
。 Visual Studio 项目仅使用文件main.cpp
和myclass.h.
这个编译:
#include "myclass.h"
int main()
return 0;
这不是:
#include "myclass.h"
int main()
myclass M;
return 0;
这会导致链接错误 - 可能是因为 myclass.cpp
或 myclass.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 安装项目