linux下動態庫.so路徑的配置

動態庫路徑配置

1、概念:

​ 衆所周知,可執行服務需要通過/lib/ld.so尋找與加載動態庫,且程序會在兩種情況下加載動態庫: 編譯鏈接運行,而動態庫的尋找可以有以下多種配置方法。

2、兩種情況下路徑配置

1、編譯鏈接時:

​ ①gcc 的 -L 參數 :

gcc tt.cpp -o tt.out -I:./include -L./lib -L../lib -ldyn.so

​ ②系統環境變量LIBRARY_PATH:

export LIBRARY_PATH=./lib

2、運行時:

① 編譯鏈接時候通過 -R選項(或 -rpath)指定 run-time path:

gcc tt.cc -o tt.out -Wl,-rpath=./

② 系統環境變量:
1、LD_LIBRARY_PATH:系統運行時讓動態鏈接庫加載器(ld.so)在運行時(run-time)有一個額外的搜索路徑選項,即增加 一個搜索路徑列表。出於安全原因,對於已設置setuid或setgid的可執行文件,LD_LIBRARY_PATH被完全忽略

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path

2、LD_PRELOAD:允許你定義在程序運行前優先加載的動態鏈接庫文件。這個功能主要就是用來有選擇性的載入不同 動 態鏈接庫中的相同函數。已達到動態庫運行時覆蓋的目的。

export LD_PRELOAD=./hack.so

/etc/ld.so.conf文件內存放可被全局共享的動態鏈接庫所在目錄:
[root@localhost sps]# ls /etc/ld.so.conf.d/
pau.conf                     HIKHost.conf                       mysql-x86_64.conf 
kernel-2.6.32-431.el6.x86_64.conf
[root@localhost sps]# cat /etc/ld.so.conf.d/pau.conf 
/home/netposa/pvg/pau
[root@localhost sps]# ldconfig

/etc/ld.so.conf包含/etc/ld.so.conf.d文件夾內配置文件, 配置好之後要通過ldconfig命令更新路徑到 /etc/ld.so.cache緩存,ld.so會從該緩存查找

④ 將所生成的動態庫,放入 /lib 或 /usr/lib 目錄下

3、優先級

​ 以上方法配置的路徑優先級依次降低

注意:234方法的影響是全局的,會影響到其他服務的庫路徑,不建議配置。如果一定要使用,可在局部環境下配置②環境變量。


參考:

https://www.cnblogs.com/openix/p/3521166.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章