我正在学习C++编程语言,我对编译器如何创建可执行文件有疑问。我的书上说:
C++是一种编译语言,因此您需要翻译计算机可以执行的文件中的源代码。这个文件是由编译器生成的,它被称为目标代码(.obj),但像helloworld程序这样的程序是由我们编写的一部分和C++库的一部分组成的。
你好世界节目中的这一部分是什么?
然后我的书上写着:
必须编译并链接程序的两个部分才能生成可执行文件。
这是否意味着可执行文件是链接程序的两个部分的结果,并且目标代码无法执行?
这两部分是1)"调用print函数并传入字符串的代码",这是您编译的hello-world程序;2) 实现打印功能的代码(比如"std::cout<<")。我们称之为标准库。
显然,如果没有标准的库对象文件,您就无法获得完整的可执行文件,因为缺少std::cout的实现。
是标准库的原因之一是为了让用户代码(你好世界文件)在不同的操作系统之间更容易移植,因为在Unix系统中,你实际上必须使用"写"函数来打印字符串;但在其他系统中,您可以使用除"写入"之外的其他功能。标准库为您统一了它。
关于标准库对象文件的详细信息包括诸如模板实例化之类的技术,您现在可能对此不感兴趣。
必须编译C和C++。您将使用一个编译器,将您的代码转换为特定于平台的可执行文件。
编译器执行许多步骤:
- 代码首先经过预处理(用宏的值替换宏(#define),用宏的内容替换include文件(#include)
- 语法分析以检查C++语法是否有效
- 语义分析构建指令树
- 优化(如有要求)
- 代码生成:它编写特定于目标平台的汇编代码
- 链接:将所有代码放在一个可执行程序中
至少,这是我在学校学到的东西。。。。
没错:C和C++都有单独的编译和链接步骤。源代码被编译为该特定处理器的目标代码。对象文件和库链接在一起,然后执行。
Java和C#都使用由各自的虚拟机解释和执行的字节码。