编译和链接

计算机高级语言的程序执行方式分为编译执行和解释执行两种。

编译执行是指源程序代码先由编译器和连接器编译、链接成可执行的机器代码,然后再执行。解释执行是指源程序代码被解释直接读取执行。自从java语言推出后,产生了一种“中间码+虚拟机”的执行方式,在这种执行方式下,源程序代码需要被编译成一种特殊的中间码,这种中间码不能直接在机器上执行,需要一个叫虚拟机的系统来管理和执行。中间码在虚拟机中可以解释执行,也可以编译执行。


编译器

编译器是将高级语言程序编译为机器语言程序的系统,编译器在编译过程中可以检测各种因无效或不可识别的程序代码而引起的错误,还可以检测程序的结构性错误。如果没有错误,编译器会生成一个扩展名为obj的目标文件。


链接器

链接器对编译器生成的各种模块进行组合,并从系统提供的程序库(如标准C++库、MFC类库、.NET  Frameword类库等)中添加所需的代码模块,最终将所有模块整合成可执行的整体,生成一个扩展名为exe的可执行程序。连接器也能检测并报告错误,如程序缺少某个组成部分,或者引用了不存在的库。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++ 开发中,我们通常使用多个文件来编写大型程序,这使得代码更可维护且易于扩展。然而,当我们需要将这些文件组合在一起构建项目时,我们需要了解如何进行编译链接。 C++ 文件分为头文件和源文件。头文件通常包含类、函数和变量的声明,而源文件包含它们的实现。当一个源文件需要访问另一个源文件中的某些内容时,我们需要在头文件中声明它们,并在源文件中包含这些头文件。 下面是一个包含两个源文件的例子:main.cpp 和 myfunc.cpp。 main.cpp 包含一个 main() 函数,myfunc.cpp 包含一个名为 myfunc() 的函数。我们将在 main.cpp 中调用 myfunc()。 main.cpp: ```cpp #include <iostream> #include "myfunc.h" int main() { std::cout << myfunc() << std::endl; return 0; } ``` myfunc.cpp: ```cpp #include "myfunc.h" int myfunc() { return 42; } ``` myfunc.h: ```cpp #ifndef MYFUNC_H #define MYFUNC_H int myfunc(); #endif ``` 在上面的代码中,头文件 myfunc.h 包含了 myfunc() 函数的声明,在 main.cpp 中通过 #include "myfunc.h" 包含了这个头文件,使得 main.cpp 知道了 myfunc() 函数的存在。 接下来,我们需要编译链接这两个源文件,生成可执行文件。编译器将源文件转换为目标文件,并将目标文件链接成一个可执行文件。 我们需要使用以下步骤进行编译链接: 1. 将每个源文件编译成目标文件。在命令行中,我们可以使用以下命令来编译两个源文件: ``` g++ -c main.cpp -o main.o g++ -c myfunc.cpp -o myfunc.o ``` 上面的命令将 main.cpp 编译成 main.o 目标文件,将 myfunc.cpp 编译成 myfunc.o 目标文件。这些目标文件包含了源文件中定义的函数和变量的实现。 2. 将所有目标文件链接在一起,生成可执行文件。在命令行中,我们可以使用以下命令来链接两个目标文件: ``` g++ main.o myfunc.o -o myapp ``` 上面的命令将 main.o 和 myfunc.o 目标文件链接起来,生成一个名为 myapp 的可执行文件。 这样,我们就完成了 C++ 多文件编译链接的过程。在实际开发中,我们通常使用构建工具来自动化这些步骤,例如 Makefile 和 CMake。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值