1、GNU CC(gcc)是GNU项目中符合ASNI C标准的编译系统
①GPL协议:开源社区的协议,里面资源课免费试用,但是做了修改必须上传共享
②Linux与Unix达成POSIX协议,只要基于POSIX协议,则编译出的应用两者均
可使用
③GNU计划:区别Linux与Unix的不同,且只能运行与Linux
2、gcc是一个交叉的平台编译器,可以再当前的CPU平台上为多种体系结构的硬件平台开
发软件
3、gcc编译经过4个阶段,分别为:预处理、编译、汇编、链接
A、预处理阶段:
预处理进行三个阶段,分别为:增加头文件、宏替换、条件编译(即开头带#的处理)
在预处理阶段,不做语法的检查
编译命令:gcc -E main.c -o mian.i 处理mian.c并存放于main.i
举例:
头文件的处理:a、头文件是<>时,在系统目录中找,找不到则报错
b、头文件是””时,先在当前目录找,再到系统目录找,找不到报错
举例:头文件在当前目时:
B、编译阶段
在编译阶段作语法检查和词法分析
编译命令:gcc -c main.c -o mian.o 生成main.o文件
举例:
C、汇编阶段
gcc -s hello.c 生成hello.s 文件
14、库函数:只可以调用,但是看不到里面的内容
库文件:看不到库文件里面定义的函数和变量,但是可以调用。库文件分为静态库和动
态库
静态库(.a结尾):在编译时讲库文件里面的代码搬迁到可执行文件中
静态库的建立:<1>先编译生成.o文件(用gcc -c )
<2>ar rcs libadd.a add.o(rcs中,rc是指静态库不存在则创建静态
库,s表示更新静态库)
<3>编译生成gcc main.c -ladd -L/...
举例:
动态库(.so结尾):在执行时将需要的库文件里的代码搬迁到可执行文件中
动态库的建立:生成.so文件:gcc -shared -fPIC add.c -o libadd.so
动态库的调用:gcc main.c ./ilbadd.so -o add
举例:
动态库和静态库的优缺点:①静态库执行速度快,动态库执行速度慢
②静态库的空间占用率高,代码拥挤;动态库相反
③静态库不易升级,动态库易于升级
④静态库布局方便,动态库布局麻烦
动态库和静态库的使用:如果平台常升级,则用动态库方便;如果要提高编译效率则用
静态库