Linux之 IO编程四

Linux 同时被 2 个专栏收录
10 篇文章 0 订阅
4 篇文章 0 订阅

1. 什么是库

1. 库是一种可执行的二进制形式文件
2. 需要被操作系统载入内存运行
3. 相比于可执行程序,它不可以直接运行
4. window 和 linux 都有自己的库,但是不兼容
5. 库有两种,1. 静态库  2. 共享库(又叫动态库)

了解: 	静态库		动态库
window 	*.lib		*.dll
linux	*.a			*.so

$ gcc  -E a.c  -o a.i    // 预编译 (预处理)
$ gcc  -s a.i  -o a.s 	 // 编译   C语法装换为汇编语法
$ gcc  -c a.s  -o a.o    // 汇编   汇编语法转换为二进制机器码
$ gcc  a.o  -o a.out 	 // 可执行程序

2.静态库的制作和使用

1. 制作
	$ gcc -c hello.c  -o  hello.o
	$ ar  -crs  libxxx.a   hello.o
	静态库的命名规范:
	必须以lib开头,紧跟库的名字,跟扩展名 .a 
	例如: libxxx.a

2. 使用静态库
	$ gcc  -o  a.out  main.c   -L路径  -lxxx
	-L: 指定静态库所在的目录
	-l: 指定静态库的名字   xxx部分

3. 运行
	$ ./a.out 

3.动态库的做作和使用

1. 制作
	$ gcc  -fPIC  -c  add.c  -o  add.o  
	$ gcc  -shared  -o  libxxx.so    add.o    
	动态库的命名规范:
	必须以lib开头,紧跟库的名字,跟扩展名 .so
	例如: libxxx.so 
2. 使用
	$ gcc  -o a.out  main.c   -L路径  -lxxx
	
	$ ldd  a.out   # 用于查看可执行程序依赖的动态库有哪些
3. 运行
	$ ./a.out    # 会报错
	动态库的搜索方式:
	1. 将动态库拷贝到  /lib/ 或者 /usr/lib/
		$ sudo cp  libxxx.so   /usr/lib/
	2. 修改 环境变量  
		$ echo  $PATH
		$ echo  $PWD
		$ echo  $HOME 
		$ echo  $LD_LIBRARY_PATH
		
		$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/sky/DC20031/day4/dynameic
		1. 只在当前终端有效
		2. 可以将这句话,写到 .profile
	3. 修改配置文件  /etc/ld.so.conf.d
		在/etc/ld.so.conf.d 创建一个常规文件 libxxx.conf  
		
		$ sudo touch libxxx.conf   # 创建配置文件
		$ sudo vi libxxx.conf 	# 向配置文件中写入so文件的路径
			/home/sky/DC20031/day4/dynameic
		$ sudo ldconfig     # 让配置文件生效

4.静态库和动态库区别

静态库:
	1.以 xxx.a 结尾命名
	2.在编译时会被链接到可执行文件中
	  因此可执行程序体积大
	  浪费硬盘资源
	3.在执行程序时与可执行文件一起加载到内存中,
		因为静态库代码就在可执行文件中
		因此浪费内存资源
	4.对程序更新,部署,发布带来麻烦

动态库:(又叫共享库)
	1.以 xxx.so 结尾命名
	2.在编译时不会链接到可执行文件中
	  因此可执行程序体积小
	3.在程序运行时才被加入内存,因此在
		程序运行时动态库必须存在
	4.有利于程序的更新,部署,发布
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

Jade Bodhi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值