当前位置: 首页 > news >正文

linux--关于GCC、动态库静态库

gcc和g++的异同

他们是不同的编译器,
在linux中,生成可执行文件不像和windows一样。
linux中是以**.out作为可执行文件**的
无论是什么系统,生成可执行文件分为4步:
预处理–>编译–>汇编–>链接。
从.c/.cpp–>.i文件–>.s文件–>.o文件–>.exe/.out文件

语法
g++ 文件 -o 生成文件名 -l 使用的库 -L 库的路径
gcc编译选项作用
-E仅预处理
-s仅编译及之前
-c仅汇编之前
-o生成可执行文件
-I(大写) directory包含include文件的搜索目录(头文件)
-g编译的时候生成调试信息
-D编译的时候指定一个宏
-w不是生成任何警告信息
-wall生成所有警告信息
-Onn取值0-3,缺省值-o1,优化从低到高
-l(小写)编译的时候使用指定的库
-L制定编译的时候,搜索的库的路径静态库什么的地址)
-shared生成共享目标文件,通常在建立共享库使用
-std制定C方言

可以用GCC去编译cpp只是会麻烦一些,但g++能直接链接到某些库,更方便。

库文件

库文件有两种

  1. 静态库:在连接阶段被复制到程序中
  2. 动态库:运行时由系统动态加载到内存中。

静态库的制作

window中后缀.lib
linux中后缀.a 命名为Libxxx.a。其中Lib前缀固定,后面的xxx才是自己的库的名字

  1. 首先获得 -o文件也就是汇编不链接的文件
  2. 将所有.o文件打包,用 ar 工具(archive)ar rcs libxxx.a xxx.o xxx.o
    就能生成.a文件
    如果是在不同目录下的文件要用这个库生成最后的可执行文件
gcc main.c -o app -I ./include/(编译的时候制定的库所在的目录) -L ./lib/ -l 使用的库名字xxx

动态库的制作

window中是.dll
linus中是.so 命名为Libxxx.so。Lib前缀固定,XXX是具体库名称

  1. 首先获得汇编之后的文件,但要不带位置信息的代码 所以不是简单的 gcc -c aaa.c bbb.c而是gcc -c -fpic xxx.c xxx.c,其中那个-fpic指令就是生成不带位置信息的代码
  2. 将所有.o文件打包,但此时的打包不含其源代码,只包含其库名信息。要用的时候再动态搜寻绝对路径找到.so地址。gcc -shared xxx.o xxx.o -o libmylib.so,-shared上面有。
    要使用的时候,需要先添加环境变量什么的,一次添加就能一直用。具体再看视频。

静态库和动态库的对比

静态库的优点:

  1. 被打包到应用程序中加载速度快
  2. 发布程序无需提供静态库,移植方便

静态库的缺点:

  1. 浪费内存(因为每次生成应用都会打包一份静态库到程序中)
  2. 更新、部署、发布麻烦(因为是需要全部重打包就要重跑一遍)

动态库的优点:

  1. 可以实现进程的资源共享
  2. 更新、发布、部署简单
  3. 可控制何时加载动态库

动态库的缺点:

  1. 加载速度比较慢(因为每次使用都要找这个地址)
    2.发布程序需要提供依赖的的动态库。

相关文章:

  • kubectl exec 实现的原理
  • 【SQL技术】不同数据库引擎 SQL 优化方案剖析
  • 30天自制操作系统第一天(1)
  • 微信小程序性能优化
  • 寒假第三周周报
  • 基于JAVA的幼儿园管理系统的设计与实现源码(springboot+vue+mysql)
  • [创业之路-307]:如何解读公司的业绩?它与股价变化的关系?
  • c++中std::thread构造函数的注意事项
  • 【Python】Python入门基础——环境搭建
  • 数据库系统原理——第十章数据恢复技术复习题
  • 学习总结三十四
  • Ubuntu20.04部署stable-diffusion-webui环境小记
  • 题海拾贝:英语作文(map)
  • Selenium定位元素的方法及其语法
  • ubuntu20.04连接airpods pro2
  • LeetCode热题100- 缺失的第一个正数【JavaScript讲解】
  • SpringMVC的工作原理
  • 基于Istio Ambient Mesh的无边车架构:实现零侵入式服务网格的云原生革命
  • ElasticSearch映射分词
  • vue3响应式丢失解决办法(三)
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋
  • 美国务卿鲁比奥抵达会场,将参加俄乌会谈
  • 商务部新闻发言人就出口管制管控名单答记者问
  • 昆明警方重拳打击经济领域违法犯罪:去年抓获905名嫌犯
  • 市场监管总局召开平台企业支持个体工商户发展座谈会
  • 文化润疆|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动