IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux】vim形成动静态库操作 -> 正文阅读

[系统运维]【Linux】vim形成动静态库操作

image-20220502220800930

  • access : 文件最近被访间的时间,我们发现实际操作下来,文件时间貌似没有变化(在较新Linux 内核中,Access时间不会被立即更新,而是有一定的时间间隔,0S才会自动进行更新时间)

  • modify : 最近一次修改文件内容的时间(当修改内容的时候,有可能修改了文件的属性(比如文件大小))

  • change : 最近一次修改文件属性的时间(修改文件权限等)


一、库

库文件都是二进制

那如何知道库里面有什么?通过:

  • 库本身
  • 头文件.h
  • 说明文档

动态库文件一般用.so结尾

静态库.a结尾

libxxx.so / libyyy.a-……

去掉lib和后缀.so/.a……之后剩下就是库名称


1. 查看依赖的库

ldd

image-20220502224805910

image-20220502225023102


2. 静态库

gcc -o xx xx -static

image-20220503133902183

  • gcc默认动态链接

静态库是将.o文件打包成一个文件

libmymath.a:add.o
	ar -rc $@ $^

%.o:%.c
	gcc -c $<

.PHONY:clean
clean:
	rm -rf add.o libmymath.a

.PHONY:output
output:
	mkdir output 
	cp -rf add.h output 
	cp -rf libmymath.a output

image-20220503162034548

  • 将打包好的放在一个目录里

image-20220503162904067

  • 查看打包哪些文件
ar -tv xx.a

%.c是GUNmake语法层,表示的是所有以".c"结尾的文件
而*.c则是linux shell 语法层的,比如:rm -f *.o 类似的。
意思基本是一样的,就是一个是GUNmake的一个是shell的


  • 如何使用?
gcc 编译的文件 -I需要头文件的目录 -L静态库的目录 -l静态库名称(去掉前缀,去掉后缀的名字)
gcc test.c -I./output -L./output -lmymath

image-20220504145611610


之前的库,在系统的默认路径下: /lib64, /usr/lib, /usr/include等编译器是能识别这些路径的
如果我不想带这些选项,可以把对应的库和头文件拷贝到默认路径下,但不推荐
上面的过程,也就是一般软件的安装过程!


3. 动态库

动态库可移植性差,体积小,如果库丢失,程序跑不了

  • shared: 表示生成共享库格式
  • fPIC:产生位置无关码(position independent code)
libmymath.so:add.o
	gcc -shared -o $@ $^
add.o:add.c
	gcc -fPIC -c -o $@ $^


.PHONY:clean
clean:
	rm -f add.o libmymath.so

.PHONY:output
output:
	mkdir output
	cp add.h output 
	cp libmymath.so output

image-20220504171841932

image-20220504171909872

image-20220504172157046


这里的动态库除了像静态库一样指明文件路径,以外,还要将其文件的环境变量添加到系统里,才能链接起来,而静态库是直接复制到文件里不需要找地址

gcc test.c -I./output -L./output -lmymath
export LD_LIBRARY_PATH=/home/rinne/class-practice/dynamic/output

image-20220504173918663


4. 添加路径到系统

在这个目录下touch一个.conf文件,再把目录复制进去

cd /etc/ld.so.conf.d/
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:20:15  更:2022-05-06 11:21:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:05:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码