-
概念:程序在編譯時不會把庫文件的二進制代碼鏈接到目標程序中,而是在運行時候才被載入。
如果多個進程中用到了同一動態庫中的函數或類,那么在內存中只有一份,避免了空間浪費問題。
-
特點:
- 程序運行在運行的過程中,需要用到動態庫的時候才把動態庫的二進制代碼載入內存。
- 可以實現進程之間的代碼共享,因此動態庫也稱為共享庫。
- 程序升級比較簡單,不需要重新編譯程序,只需要更新動態庫就行了。
├── app
│ └── demo.cpp
└── tools
├── public.cpp
└── public.h
動態庫制作
[root@localhost tools]# g++ -fPIC -shared -o libpublic.so public.cpp
├── app
│ └── demo.cpp
└── tools
├── libpublic.so
├── public.cpp
└── public.h
編譯
//不推薦
[root@localhost app]# g++ -o demo demo.cpp /root/code/02demo/tools/libpublic.so
//推薦
[root@localhost app]# g++ -o demo demo.cpp -L/root/code/02demo/tools -lpublic
./demo: error while loading shared libraries: libpublic.so: cannot open shared object file: No such file or directory
查詢動態庫目錄
echo $LD_LIBRARY_PATH
設置環境變量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/code/02demo/tools
├── app
│ ├── demo
│ └── demo.cpp
└── tools
? ├── libpublic.so
? ├── public.cpp
? └── public.h
推薦一個零聲學院項目課,個人覺得老師講得不錯,分享給大家:
零聲白金學習卡(含基礎架構/高性能存儲/golang云原生/音視頻/Linux內核)
https://xxetb.xet.tech/s/3Zqhgt