目录
gcc/g++是一种编译器,用来将C/C++语言转换成机器语言
格式:gcc [选项] 编译的文件 [选项] [目标文件]
如果直接进行gcc [编译文件] -o [目标文件],则会直接生成可执行文件
gcc将高级语言转换成机器语言分为四个步骤:
预处理中主要包含了四个步骤
格式:gcc -E test.c -o test.i

我们可以看见预处理阶段完成了我们所说的所有步骤
编译的最主要功能将高级语言转换成汇编语言
格式:gcc -S test.i -o test.s

汇编语言比起高级语言更加简洁
编译的最重要步骤是将汇编语言转换成二进制语言,也就是机器可识别代码
格式:gcc -c test.s -o test.o

在生成.o结尾的文件后就标识着编译成功,接着我们就需要进行链接
格式:gcc test.o -o test

这里我们需要涉及一个重要的知识点,那就是我们为什么要进行链接?
我们已经将我们的代码编译成功了,链接的作用又是什么呢?

我们可以发现我们所写的代码中,包含了printf函数,而print这个函数是我们所实现的吗?明显不是,那我们调用这个函数就需要完成这个函数的实现,又因为我们没有完成这个函数的实现,但是库中实现了这个函数,因此我们在进行链接的时候是链接的那些库,以供我们完成运行。
静态库是指编译链接时,将所实现的函数代码全部加入进可执行文件中,因此生成的文件比较大,但是在运行中就不需要在链接库函数
动态库是指编译链接时,没有将所实现的函数代码加入在可执行文件中,而是在链接期间链接了所需的库,这样可以节省空间
在Linux中,默认链接的是动态库

而我们也可以主动链接静态库

我们发现当链接静态库时,内存大小几乎是链接动态库的100倍