Linux 动静态库和_make_进度条(一)

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

一、怎样明白条件编译

   1.

  1. gcc code.c -o code -DM 命令行级别的宏定义
复制代码

预处理的本质就是修改编辑我们的文本代码

  • 头文件展开到源文件中
  • 去注释
  • 宏替换
  • 条件编译
  1. 宏定义的默认值是1
  2. 可以自己设置宏定义的值
  3. -DM=100 -> #define M = 100 插入到我们的代码中
复制代码

条件编译的用途?

  • 软件举行专业度,收费环境举行区分(业务),使用条件编译,可以举行代码的动态裁剪,好比vs2022分为社区版和专业版
  • Linux的内核源代码也是接纳条件编译的方式举行代码的裁剪的
  • 开发工具,应用软件,好比一款软件可以在windows下跑,也可以在linux下跑,在windows下就把Linux的代码裁掉,在linux下就把windows的代码裁掉
为什么C/C++编译,要先变成汇编?
4. 因为根据汗青的发展,C语言如果直接编程二进制的机器语言资本太高了,当时候汇编的发展了几十年了,C语言变成汇编(然后汇编变成二进制是不需要我们处理的)打孔编程也叫二进制编程

编译器的发展过程
6. 自举过程:先出现汇编语言,然后发明用二进制版的汇编编译器编译汇编语言,之后迭代后,发明汇编语言的编译器编译汇编语言

二、动静态库

1. 理论

  1. ls /usr/lib64 linux系统中自带的库
复制代码
  1. 库:是一套方法大概数据集,为我们开发提供最基本的包管(基本接口,功能,二次开发)
二次开发:好比printf函数不需要我们本身实现,可以直接调用

  什么叫做动静态库,什么叫做动静态连接,怎样明白?
1.动态库:linux(.so),windows(.dll)
2.静态库:linux(.a),windows(.lib)
   2. lib是前缀,.so是后缀,中间的是c,就是C语言的库,是xyz,就是xyz的库

3. 动态库内部实现的方法我们本身实现的程序会使用库中的方法这两者链接起来形成可执行程序

4. 动态链接:执行目的方法,需要跳转到库中执行,执行完后在返回
静态链接:直接把静态库中的方法拷贝到目的程序中,直接在目的程序中执行这个方法


  动态链接:

  • 程序通过动态链接找到动态库,程序加载到内存中,在内存中往下执行任务,执行到上网这个任务时,通过库函数调用找到动态库实现,实现完之后就库函数返回
  • 很多人都可以到网吧上网,以是网吧就是共享库被多个程序共享,一旦缺失,会导致全部程序无法执行

    静态链接:
  • 可以把电脑仓库中的电脑拷贝到我们的程序中,如许就不需要网吧了,把我们程序中使用的库方法拷贝给我们本身,静态库只有在链接的时候有用,一旦形成可执行程序,静态库可以不再需要

    动静态库的对比:
  • 动态库形成的可执行程序的体积一定很小
  • 可执行程序对静态库的依赖水平很小,对动态的库的依赖程序大,以是动态库不能缺失
  • 程序运行需要加载到内存,静态链接的会在内存中出现大量重复的代码
  • 动态链接的比力节流内存和磁盘空间
2. 实践

1.系统下的库

2. 默认系统是动态链接的,ldd 是 Linux 系统中的一个下令行工具,用于打印共享库依赖关系,file code表现具体的文件信息

3. 静态链接
  1. 显示静态库
  2. gcc code.c -o code -static
  3. 安装C语言的静态库
  4. sudo yum install -y glibc-static
复制代码

4.C语言的静态链接

验证C++:
5.C++安装静态链接

6.C++静态链接

7.关于动态库


  • 动态库会在内存中存在一份,这一份是全部程序共享的
  • 运行时,每个程序会加载本身的可执行文件到内存中,因此静态库的代码拷贝会在内存中存在多份(每个程序一份),静态库不会存在内存中

3. 解决普通用户的sudo问题

   1. 出现普通用户无法使用sudo的问题,
使用vim进入 etc/sudoers中修改配置文件的100行左右的root复制一份,添加给普通用户

  


4. 技术上明白库

   1. 可以像C语言一样实现多文件的链接使用,好比.c文件调用.h文件使用
  

上层中有.h文件和.o文件(包含了.c文件),可以实现功能main中调用函数,上层中把全部的.o文件打个包变成了可执行文件
.c
func1实现函数
func2实现函数
.h中是方法的声明

   2. 可以将多个.o文件打包形成一个可执行文件而且和.h文件放到一起,.o文件中存在.c实现文件,如允许以把这个给别人使用而不袒露源文件
  

3. 全部的.o是一个库

   4. 链接的本质是打包全部的.o文件(包括本身的.o和C语言库中的.o文件),和库C语言库中的.h文件一起形成可执行文件
  

三、make和make_file

   1. make是一条下令,make_file是一个文件
  

   2. 进入vim在Makefile文件中写入如下下令,如许使用make下令,就等同于使用如下下令
  1. code:code.c
  2. tab键(四个空格) gcc -o code code.c
复制代码

   3. 依赖关系和依赖方法
  1. code:code.c 依赖关系
  2. tab键(四个空格) gcc -o code code.c 依赖方法
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表