前面我们讲解了一下vim的使用,它方便了我们进行文本的删改。接下来,我们就要理解一下gcc/g++,并且对动静态库有一个基础的理解。
一.gcc/g++的使用
首先我们要明白gcc/g++是干什么的,其实这两个都是编译源代码的工具,他会识别文件后辍来编译源代码,形成可执行文件。gcc是编译.c文件的,g++是编译.cpp文件的。
我们在学习c语言的时候学习了编译的四个过程,这里我们在重新回顾一下。
首先是预处理,它分为四步,分别是头文件展开、去注释、条件翻译(可以实现对代码的动态裁剪)、宏替换。在linux指令是这样的:
gcc -E code.c -o code.i
code.c是源码,code.i就是我们预处理得到的.i文件。
其次是编译,它是将已经与处理过的.i代码编译成汇编代码,指令如下:
gcc -S code.i -o code.s
其中code.s就是我们的汇编代码。
然后是汇编,它是将汇编代码转成2进制文件的。指令如下:
gcc -c code.c -o code.o
其中code.o就是我们的二进制文件。
最后一步是链接,它是最后一步,是形成可执行文件的。
其实,.o文件+系统库=可执行程序。即代码+头文件+库=可执行。
当然我们也可以直接用gcc code.c得到a.out,这个文件打不开,但它就是可执行文件。
二.动静态库的理解
在我们的系统中,无论是我们的windous还是linux下,都有很多动静态库。那么什么是动静态库呢。
动态库:是c/c++或其他第三方提供的方法集合,被所有程序链接的方式关联起来。我们要明白,库中的所有函数,都有入口地址。所谓动态链接,就是把库函数的函数地址拷贝到可执行程序的特定位置。后缀为.so。
静态库:是c/c++或其他第三方提供的方法集合,被所有程序拷贝的方式,拷贝到可执行文件,这就是静态链接。后缀为.a。
那么动静态库的优缺点是什么呢?我们来看:
动态库:优点:可执行程序的体积小(只需传指针);缺点:具有强依赖性。(需要地址)
静态库:有点:可以无视库,能独立运行;缺点:体积大。
其实动静态库各具优势,不过在我们的计算机生涯种,我们更多的还是用的是动态库,毕竟在每个操作系统中,初始化的时候都有动态库,也不存在依赖不上的时候。