静态库与共享库

Linux头文件存放在那个地方?

对于c语言来说,头文件存放在/usr/include目录及其子目录中
对于依赖特定Linux版本的头文件,存放在/usr/include/sys或/usr/include/linux

在调用c编译器时,使用-I来包含保存在子目录或非标准位置下的头文件
gcc -I/usr/openwin/include main.c
指示编译器不仅在标准库下找头文件,也要在/usr/openwin/include下查找main.c包含的头文件

什么是库?

库是一组预先编译好的函数的集合,这些函数按可重用的原则编写

库文件在什么地方?

标准系统库文件 存放在 lib或/usr/lib
库文件的名字总以lib开头,随后指明这是什么库(c:c语言库 m:数学库),最后以.开始,然后给出库文件类型。xxx.a(传统静态库函数) xxx.so(共享库函数)

可以给出库文件路径名或-l标志来告诉编译器要搜索的库文件
gcc -o fred fred.c /usr/lib/libm.a

gcc -o fred fred.c -lm
如果有共享库有lm标志就会自动搜索共享库
可以通过-L增加搜索路径
gcc -o xllfred -L/usr/openwin/lib xllfred.c -lxll

什么是静态库?

静态库也称归档文件,文件名以.a结尾
使用ar 创建归档文件,gcc -c编译
缺点:同时运行多个程序,并且都是用同一个函数库函数,内存中就会有一个函数的多个备份,程序文件自身也有多个备份,造成内存和磁盘空间浪费。

静态库的创建?

1、将所有源文件编译为 .o文件
2、ar crv libxxx.a add.o max.o
3.使用库:
[1] gcc -o main main.c -L库路径 -lxxx
[2] gcc -o main main.cc ./libxxx.a

这里写图片描述

什么是共享库?

保存位置和静态库一样,后缀为.so
一个程序使用共享库的链接方式:程序本身不包含函数代码,引用运行时可访问的代码,程序被装到内存执行时,函数产生对共享库的调动。
优点:系统只保留共享库的一份副本,磁盘上也仅保存一份。
共享库更新时,独立于应用程序。

可执行程序(命令)存放在什么地方?

/bin

这里写图片描述

共享库的创建!!!

1、将所有源文件编译为 .o文件
2、gcc -shared -fpic -o libfoo.so add.o max.o
3、gcc -o main main.c -lfoo
(由于库在标准位置,所以省去路径)
./main出错,有可能因为库文件没在标准位置,需要切换到管理员模式下,拷贝库到/usr/lib或/lib

这里写图片描述

这里写图片描述

静态库和共享库区别?

静态库:生成可执行程序会包含用到的库方法,主机上没有该库,程序也能执行。
共享库:生成的可执行程序不包含库方法,只做标记,在运行程序时,才会去装载该方法,所以,主机上没有该方法程序无法执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值