c++构建工具之make使用小结
1.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的生成
編譯生成靜態(tài)庫(kù)步驟:
第一步,生成目標(biāo)文件。
gcc -c test.c
第二步,把目標(biāo)文件歸檔。
ar r libtest.a test.o
file libtest.a
編譯生成動(dòng)態(tài)庫(kù)步驟:
???? gcc demo.c -fPIC -shared -o libtest.so
由以上命令生成動(dòng)態(tài)庫(kù)libtest.so,為了不需要?jiǎng)討B(tài)加載動(dòng)態(tài)庫(kù),在命令時(shí)需以lib開(kāi)頭以.so為后綴。
–fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的所以動(dòng)態(tài)載入時(shí)是通過(guò)代碼拷貝的方式來(lái)滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。
–shared:指明編譯成動(dòng)態(tài)庫(kù)。
2.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的鏈接
編譯鏈接靜態(tài)庫(kù)
? gcc demo.c -ltest -L. -static -o demo
編譯鏈接動(dòng)態(tài)庫(kù)
? gcc test.c –L . –ltest –o test
??????? -L:指明動(dòng)態(tài)庫(kù)所在的目錄
??????? -l:指明動(dòng)態(tài)庫(kù)的名稱,該名稱是處在頭lib和后綴.so中的名稱,如上動(dòng)態(tài)庫(kù)libtest.so的l參數(shù)為-l test。
-ltest -L./lib 指定鏈接庫(kù)路徑
-wl,-rpath /home/Tim/demo/lib 指定搜索鏈接庫(kù)路徑
-wl,-Bstatic 后面的-l使用靜態(tài)庫(kù)鏈接
-wl,-Bdynamic 后面的-l使用動(dòng)態(tài)庫(kù)連接
顯式加載與隱式加載
顯式加載通過(guò)編譯是鏈接符號(hào)表,運(yùn)行時(shí)由系統(tǒng)搜索加載動(dòng)態(tài)庫(kù)
隱式加載通過(guò)程序運(yùn)行時(shí)調(diào)用下面幾個(gè)系統(tǒng)調(diào)用手動(dòng)加載動(dòng)態(tài)庫(kù)
dlopen 用于庫(kù)的打開(kāi)
dlerror 用于錯(cuò)誤檢測(cè)
dlsym 用于獲取庫(kù)中函數(shù)指針
dlclose 關(guān)閉動(dòng)態(tài)庫(kù),手動(dòng)加載動(dòng)態(tài)庫(kù)
3.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的加載
ldd test 查看執(zhí)行程序的動(dòng)態(tài)庫(kù)依賴
nm libtest.so 查看動(dòng)態(tài)庫(kù)的符號(hào)
strings libtest.so 查看動(dòng)態(tài)庫(kù)中字符串
strip libtest.so 脫去動(dòng)態(tài)庫(kù)中符號(hào)信息
sudo lsof -p pid 查看運(yùn)行進(jìn)程的動(dòng)態(tài)庫(kù)依賴
env 查看當(dāng)前shell用戶環(huán)境變量
sudo env 查看切換sudo環(huán)境變量
export ld_library_path 配置動(dòng)態(tài)庫(kù)路徑
pkg-config 配置搜索動(dòng)態(tài)庫(kù)路徑命令
vi /etc/profile 配置環(huán)境變量到系統(tǒng)配置文件
source /etc/profile 使系統(tǒng)配置文件立即生效
vi ld.so.conf 查看系統(tǒng)動(dòng)態(tài)庫(kù)共享目錄配置
sudo ldconfig 使系統(tǒng)動(dòng)態(tài)庫(kù)共享目錄生效
sudo visudo 修改執(zhí)行sudo切換時(shí)保留當(dāng)前用戶shell環(huán)境
sudo cat /etc/sudoers
Defaults??????? env_keep+="ld_library_path"
4.參考資料
http://man.linuxde.net/ldconfig
http://blog.chinaunix.net/uid-24641004-id-5028821.html
https://www.cnblogs.com/zhangsir6/articles/2956798.html
總結(jié)
以上是生活随笔為你收集整理的c++构建工具之make使用小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++构建工具之xmake使用实例
- 下一篇: c++构建工具之cmake使用小结