OHHHH,发现自己的基础知识真他妈的是呼呼漏风,,,,,,,,,,,
尴尬得意识到,不仅是英语水平有问题,他码的基础知识也有问题。在预先学习某个内容之前,应该对这个内容和相关设计的专有名词基础概念有个初步的认识,然后再学习也许会快一些?
我现在在尝试这样做,先gpt了解基础的用法和解释和一些常见的单词与中文对上号(以后英语好了也许这一步就不用了他妈的,,,)
简单demo : 将一个源文件通过g++编译链接生成一个可执行文件:
(1)预编译阶段 :
该阶段没有指令
(2)编译源文件生成object file
g++ -c source_file.cpp -o object_file.o
`-c` 选项 :告知编译器仅将源文件编译生成object file 而不用链接该object file 为一个可执行文件
`-o` 选项 :告知编译器 生成的该 object file 名字是什么
(3)链接 object file 来生成一个可执行文件
链接阶段:链接器(linker)将目标文件与其他必要的目标文件和库结合起来,解析(resolve)外部引用,并生成可供操作系统运行的最终可执行文件。
g++ object_file.o -o executable_file
`-o` 选项 :告知编译器 生成的可执行文件的名字是什么
(3)已经生成链可执行文件,美美执行即可
./executable_file
1. header file = include file 头文件
定义:An include file, often referred to as a header file, is a file containing declarations of functions, objects, or macros that are used in a program.
header file 中包括 函数,对象 或者 宏 的声明。将包括这些声明的头文件 用 #include 指令包括在source file 中,就相当于告知编译器将 header file 中的内容 插入到 source file 的对应使用`#include<> `的位置中
头文件的作用是:让你可以在源文件中自由使用这些头文件中声明的 函数、对象、宏 等。
2. include directionary = include path
用于告知编译器从那里可以寻找到include ifle
一般来说:被 `<>` 符号包裹的头文件,例如 `<iostream>`一般是从系统的环境目录中搜索,搜索不到就从指定的路径中搜索(这个指定的目录被保存在 include directionary 中)
被 ` " " ` 符号包裹的头文件,例如 ` "math.h" `一般是从当前源文件所在的目录中搜索,搜索不到就从指定的路径中搜索(这个指定的目录被保存在 include directionary 中)
在 cmake 中,可以使用 target_include_directionarier() 或 include_directionaries() 两种函数来制定这个路径
2. macros : 宏
3. machine code :
机器代码 是指 可以由计算机CPU 直接执行的 指令的二进制表示形式。它由 0 和 1 组成,特定于 CPU 的架构。
机器代码中的 每条指令 对应于 CPU 可以执行的 特定操作。
在从源文件生成可执行文件的过程中,在编译阶段会生成 machine code
4. executable code (executable file)&& machine code:
executable code 中包括 machine code,也包括一些使操作系统能够有效运行程序的其他必要的信息,例如:头、节、元数据和数据结构等内容。这些附加信息能帮助操作系统了解如何正确加载和运行程序。
操作系统依赖可执行文件中的附加信息来正确设置程序的执行环境,管理内存分配,处理输入和输出操作,并执行其他基本任务以支持程序的执行。
4. object code
5. 关于 这三个文件之间仍有疑问,但我要换一课目了,,,脑子不转了,,,,
3. pre-compiled 预编译
4. 编译链接的过程:
编译(compilation)一般被分为三步骤:
预处理(preprocessing) : 预处理器将解析(resolve)源文件(source file)和头文件(header file)中的所有的预处理命令(preprocessor directive)。预处理命令包括 #define #include 等等
编译:将 预处理后的代码 转换为 汇编代码或直接转变为目标代码
6. include file 和 .lib 区别
c++ - include directories vs. lib directory concept question - Stack Overflow
3. 举一个编译 所谓 include file 的例子:
我的文件和文件组织形式如下:
想要成功将main.cpp编译生成可执行文件,需要使用指令告知 g++ 编译 main.cpp 的时候需要链接上 math.cpp 中的内容(因为main.cpp 中使用了 math.cpp 中定义的函数)
编译指令如下:
g++ -o myprogram main.cpp math.cpp
这里就会存在一个疑问:g++是咋找到 math.cpp这个地址的,在发现main.cpp 文件中没有 对add函数的定义,就可以只接找到对应的math.cpp么????