博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux静态库和共享库
阅读量:5797 次
发布时间:2019-06-18

本文共 1160 字,大约阅读时间需要 3 分钟。

hot3.png

东简介

库是一组预先编译的函数集合。标准系统文件存在/lib和/usr/lib中。链接程序需要知道搜索那些库文件来生成可执行文件。库有两种:静态库(后缀名为a的文件)和共享库(后缀名为so的文件)

库的使用:

在gcc的编译时可以通过文件的库文件路径名或者-L -l来告诉编译器要搜索的库文件(—L指定在哪个文件夹中搜索库文件,-l告诉库文件名字)
gcc -o test test.c  /opt/libdemo.a
gcc -o test test  -L/opt -ldemo

静态库

函数库最简单的一种形式就是目标文件,当程序需要该函数时,它包含一个声明该函数的头文件,编译器和链接器负责将程序代码和函数库结合在一起使用。
编译器编译时使用头文件,链接器链接时时有目标文件。
例子:
file1: hello
.c  库函数源文件
# include <stdio.h >
void say()
{
    printf( "gaoxing");
}
gcc -c hello.c 生成目标文件hello.o
file2: demo.h  库函数头文件 
void say()
file3: main.c  使用库函数 
# include <stdio.h >
# include "demo.h"
int main()
{
    say();
}
gcc -c main.c
gcc -o main main.o hello.o 
或者 
gcc -o main main.c  hello.o
这就是静态的使用。有人说这不是静态库,这是目标文件。静态库就是目标文件的归档文件。
ar  crv  libhello.a hell.o
为函数库生成一个内容表:
ranlib libhello.a
现在编译命令如下:
gcc -o main main.c -L. -lhello

共享库

静态库的缺点是,当你运行多个应用程序它们使用同一个函数库的函数时,内存中会有同一个函数的多份副本。
共享库的链接方式是这样的:程序本身不包含函数代码,而是引用运行时可访问的共享代码。当编译好的文件加载内存中,函数引用解析并产生共享库的调用,这样多个程序使用同一个库的副本。另一个好处是共享库的更新独立于依赖它的应用程序.
在linux操作系统中,负责装载共享库并解析客户函数引用的程序是ld.so.用于搜索共享库的额外位置可以在文件/etc/ld.so.conf中配置。如果修改了这个文件需要执行ldconfig来处理(如果在/usr/lib或者/lib中添加共享库也需要执行这个命令,编译boost是有需要执行这个命令)
可以通过ldd查看一个程序需要的共享库

转载于:https://my.oschina.net/1987times/blog/279529

你可能感兴趣的文章
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
Windows phone 8 学习笔记
查看>>
我的友情链接
查看>>
sshd_config设置参数笔记
查看>>
LeetCode--112--路径总和
查看>>
感悟贴2016-05-13
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
库克称未来苹果用户可自己决定是否降频 网友:你是在搞笑吗?
查看>>
Sublime Text 2 技巧
查看>>
参加婚礼
查看>>
刚毕业从事java开发需要掌握的技术
查看>>
vim
查看>>
Java重写equals方法和hashCode方法
查看>>
Spark API编程动手实战-07-join操作深入实战
查看>>
H3C-路由策略
查看>>
v$archive_gap dg dataguard 断档处理 scn恢复
查看>>
Winform打包发布图解
查看>>
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>