c++ - Visual Studio 的对象文件

标签 c++ visual-c++ linker

我有一个主文件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 文件吗?

谢谢!

最佳答案

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

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

关于c++ - Visual Studio 的对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061477/

相关文章:

c++ - 为什么在堆栈上声明的数组的变量名不是指针 C++?

c++ - 什么时候加入 Haskell 线程?

c++ - 访问属性表中的控件

sockets - 当send()成功时,WSAWaitForMultipleEvents返回超时

c++ - 如何读取nm命令: What does nm options -T and -U (undefined) mean?

c++ - 一次从文件中读取一个字符(C++)并存储到二维数组中?

c++ - SOIL 未解析的外部符号

c++ - C++ 头文件相互引用时出现神秘的编译器错误

ios - 通过编程将空部分添加到 iOS MachO 文件中?

链接器可以内联函数吗?