一.gcc工作流程
- 预处理 - -E
- 宏替换
- 头文件展开
- 注释去掉
- xxx.c ->xxx.i
- c文件
- 编译- -S
- xxx.i->xxx.s(最浪费时间的)
- 汇编文件
- 汇编 - -c
- xxx.s->xxx.o
- 二进制文件
- 链接 - -
- xxx.o->xxx(可执行)
二.gcc常用参数
- -v/–version 查看版本号
- -I 编译的时候指定头文件路径
-c
- 将汇编文件生成二进制文件,得到一个.o文件
- 源代码
-o 指定生成的文件的名字
- -g gdb调试的时候需要加
- -D
- 在编译的时候指定一个宏
- 使用场景:测试程序的时候用
- -Wall 添加警告信息
- -On 优化代码,n是优化级别:1,2,3
三.动、静态库的优缺点
静态库:
- 优点:
- 静态库被打包到应用程序中加载速度快
- 发布程序无需提供静态库,移植方便
- 缺点:
- 销毁系统资源,浪费内存
- 更新、部署、发布麻烦。
动态库:
- 优点:
- 可实现进程间资源共享
- 程序升级简单
- 程序猿可以控制何时加载动态库
- 缺点:
- 加载速度比静态库慢
- 发布程序需要提供依赖的动态库
四.静态库创建过程
五.静态库的制作
1. 库是什么?
- 二进制文件
- 将源代码 –> 二进制格式的源代码
- .c .cpp
- 加密
2. 库制作出来之后, 如何给用户使用?
- 头文件
- 制作出的库
六. 静态库的制作和使用
1.命名规则: libtest.a
- lib
- xxx - 库的名字
- .a
2.制作步骤:
- 原材料:源代码.c .cpp
- 将.c文件生成.o
- gcc a.c b.c -c
- 将.o 打包
- ar rcs 静态库的名字 原材料
- ar rcs libtest.a a.o b.o
- ar - archive
3.库的使用:
- gcc test.c -I ./ -L./lib -lmycalc -o app
- -L: 指定库的路径
- -l:指定库的名字取得lib和.a
七.动态库的制作和使用
1.命名规则
-libxxx.so
2.制作步骤
- 将源文件生成.o
- gcc a.c b.c -c -fpic(fPIC)
- 打包
- gcc -shared a.o b.o -o libxxx.so
3.库的使用
- 头文件a.h
- 动态库 libtest.so
-参考函数声明编程测试程序 main.c
- gcc main.c -I ./ -L ./ -l test -o app
4.动态库无法加载:
使用环境变量
- 临时设置:
- 在终端:export LD_LIBRARY_PATH=动态库的路径:$LD_LIBRARY_PATH
- 永久设置:
- 用户级别:
- 用户级别:
~/.bashrc配置完成:
重启终端
source ~/.bashrc- 临时设置:
- 系统级别:
/etc/profile
source /etc/profile
- /etc/ld.so.cache文件列表
- 找到一个配置文件
- /etc/ld.so.conf
- 把动态库的绝对路径添加到文件中
- 执行一个命令:
- sudo ldconfig -v
- 找到一个配置文件
5.知识点拓展:
- dlopen, dlclose, dlsym
八.GCC是什么?有哪些作用?
GCC有什么作用?Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。
gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
GCC有什么作用?
Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。