二.gcc动静库的制作

一.gcc工作流程

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的文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值