静态库和动态库

先这样

file

静态库

然后编译成静态库

静态库的制作和使用流程如下:
1)制作静态库

g++ -c -o lib库名.a 源代码文件清单

2)使用静态库

g++ 选项 源代码文件名清单 -L库文件所在的目录名 -l库名

本例的使用过程如下:

[wsm@localhost tools]$ g++ -c -o libpublic.a public.cpp
[wsm@localhost tools]$ cd ../app
[wsm@localhost app]$ g++ -o demo demo01.cpp -L/home/wsm/test/tools -lpublic
[wsm@localhost app]$ ./demo
调用了func()函数。
我是一只傻傻鸟。

动态库

先把输出的文字改下

动态库的制作和使用流程如下:
1)制作动态库

g++ -fPIC -shared -o lib库名.so 源代码文件清单

2) 使用动态库

g++ 选项 源代码文件名清单 -L库文件所在的目录名 -l库名

有两个要注意的点:

  1. 运行可执行程序的时候,需要提前设置LD_LIBRARY_PATH环境变量。
  2. 如果动态库和静态库同时存在,编译器将优先使用动态库。

本例的使用过程如下:

[wsm@localhost tools]$ g++ -fPIC -shared -o libpublic.so public.cpp
[wsm@localhost tools]$ cd ../app
[wsm@localhost app]$ g++ -o demo demo01.cpp -L/home/wsm/test/tools -lpublic
[wsm@localhost app]$ ./demo
./demo: error while loading shared libraries: libpublic.so: cannot open shared object file: No such file or directory
[wsm@localhost app]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wsm/test/tools
[wsm@localhost app]$ g++ -o demo demo01.cpp -L/home/wsm/test/tools -lpublic
[wsm@localhost app]$ ./demo
动态库 调用了func()函数。
动态库 我是一只傻傻鸟。

总结

1.1)静态库的概念

  • 程序在编译时会把库文件的二进制代码链接到目标程序中,这种方式称为静态链接。
  • 如果多个程序中用到了同一静态库中的函数或类,就会存在多份拷贝。

1.2)静态库的特点

  • 静态库的链接是在编译时期完成的,执行的时候代码加载速度快。
  • 目标程序的可执行文件比较大,浪费空间。
  • 程序的更新和发布不方便,如果某一个静态库更新了,所有使用它的程序都需要重新编译。

2.1)动态库的概念

  • 程序在编译时不会把库文件的二进制代码链接到目标程序中,而是在运行时候才被载入。
  • 如果多个进程中用到了同一动态库中的函数或类,那么在内存中只有一份,避免了空间浪费问题。

2.2)动态库的特点

  • 程序在运行的过程中,需要用到动态库的时候才把动态库的二进制代码载入内存。
  • 可以实现进程之间的代码共享,因此动态库也称为共享库。
  • 程序升级比较简单,不需要重新编译程序,只需要更新动态库就行了。
暂无评论

发送评论 编辑评论


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