Linux C——库

库的定义

库就是把常用的函数的目标文件打包在一起,提供函数调用的接口,以便后续的使用或者发布,库的本质是可执行程序的二进制形式。
在不同的操作系统中,库不可兼容,在Linux的平台下,静态库文件的后缀是 .a ,动态库的后缀是 .so;在window的平台下,静态库文件的后缀是 .lib ,动态库的后缀是 .dll。
在Linux操作系统中,库文件存放在/usr/lib目录下,头文件存放在/usr/include目录下。

库的分类

库分为静态库和动态库,二者最大的区别是代码被载入的时刻不同。

静态库

静态库在程序编译时会被连接到目标代码中。
优点:程序运行时将不再需要该静态库;运行时无需加载库,运行速度更快
缺点:静态库中的代码复制到了程序中,因此体积较大;且静态库升级后,程序需要重新编译链接

动态库

优点:程序在执行时加载动态库,代码体积小;程序升级简单;不同应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
缺点:运行时还需要动态库的存在,移植性较差。

库的制作

静态库的制作

1.将源文件编译成生成目标文件

gcc -c xxx.c -o xxx.o

2.创建静态库用ar命令,将.o转换成.a

ar crs lib库名.a xxx.o

静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a
3.测试使用静态库

gcc main.c -L.库的路径 -l库名

动态库的制作

1.用gcc创建共享库

gcc -fPIC -c xxx.c -o xxx.o 

fPIC的含义是创建与地址无关的编译程序(就是不和路径进行关联)。

gcc -shared -o lib库名.so xxx.o

2-测试动态库使用

gcc main.c -L. -l库名

运行时报错./a.out: error while loading shared libraries: libmyadd.so: cannot open shared object file: No such file or directory
这是因为系统会默认从/usr/lib目录下查找库文件,所以只需将库文件移动到该目录下即可。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇