[toc]
# 基础知识
编译过程分为四个过程,编译 (编译预处理、编译、优化),汇编,链接
1. 编译预处理:处理以 #开头的指令 2. 编译、优化:将源码.cpp 文件翻译恒.s 汇编代码 3. 汇编:将汇编代码翻译成机器指令.o 文件 4. 链接:汇编程序生成的目标文件,即.o 文件,并不会立即执行,因为可能会出现: .cpp 文件中的函数引用了另一个.cpp 文件中定义的符号或者调用了某个库文件中的函数。那链接的目的就是将这些文件对应的目标文件连接成一个整体,从而生成可执行的程序.exe 文件。 链接分为两种:
静态链接
:代码从其所在的静态链接库中拷贝到最终的可执行程序中,在该程序被执行时,这些代码会被装入到该进程的虚拟地址空间中。动态链接
:代码被放到动态链接库或共享对象的某个目标文件夹中,连接程序只是在最终额可执行程序中记录了共享对象的名字等一些信息。在程序执行时,动态链接库的全部内容会被映射到运行时相应进行的虚拟地址的空间.
二者的优缺点:
-
静态链接:浪费空间,每个可执行陈旭都会有目标文件的一个副本,这样如果目标文件进行了更新操作,就需要重新进行编译链接生成可执行程序 (更新困难); 优点就是执行的时候运行速度快,因为可执行程序具备了程序运行的所有内容。
-
动态链接:节省内存、更新方便,但是动态链接是在程序运行时,每次执行都需要链接,相比静态链接会有一定的性能损失。
一个是一开始就编译,所以难以更新,一个是 dll
# 实践部分
该部分摘自 《C++ Primary Plus》
# 创建源代码
rt, 创建 demo.cpp
1 |
|
# 直接生成可执行文件.exe
前提,首先保证自己电脑上装有 MINGW 或其他 C++ 编译器
1 | g++ demo.cpp |
注意:
从 g4.3 版本开始,g 要求编译源代码文件时使用标记 -std=c++0x
1 | g++ -std=c++11 demo.cpp |
# 编译成汇编目标代码
1 | g++ -c demo.cpp -o demo.o |
# 目标代码链接生成可执行
1 | g++ -o demo.exe demo.o |