歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 淺析 Linux LD_LIBRARY_PATH

淺析 Linux LD_LIBRARY_PATH

日期:2017/2/28 14:44:52   编辑:Linux教程

㈠ 歷史背景

現如今、軟件大多自帶共享庫、或者出於安全、或者基於商業考量

如:

Oracle :$ORACLE_HOME/lib

MySQL :$HOME/mysql/lib

下面貼上oracle用戶下.bash_profile裡關於LD_LIBRARY_PATH設置

export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/X11R6/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386/server
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/rdbms/lib

㈡ 幾個概念

① 下面幾個大意相近

共享庫、動態鏈接庫、.so文件

② ld.so 花名又叫:共享庫加載器

㈢ 存在的意義

用來告訴 ld.so 到哪裡可以找到某某人的共享庫

㈣ 大概說說

.so文件的管理和加載由ld.so負責、他在標准路徑/lib 或 /usr/lib 裡查找APP所需的.so、

但對於非標路徑:

Linux做法是把私有路徑加入/etc/ld.so.conf、運行ldconfig生成ld.so.cache、ld.so會去查找這個cache

UNIX作風則是采用LD_LIBRARY_PATH來處理非標路徑的.so文件

查找優先級如下(Linux):

① LD_LIBRARY_PATH 環境變量指定目錄

② /etc/ld.so.conf指定目錄

③ 標准路徑 先/usr/lib 再 /lib

㈤ 常見錯誤

error while loading shared libraries:ooxx.so.0:cannot open shared object file:No such file or directory

這裡的ooxx是如何命名的、有興趣的朋友自行參考 點擊打開鏈接

㈥ 通用的方案

① 將這些自帶庫cp到/usr/lib或/lib、然後ldconfig 有個案例:點擊打開鏈接

② /etc/ld.so.conf 、然後ldconfig

③ LD_LIBRARY_PATH(這個變量有些遭人诟病)

補充:

查看某程序所依賴的共享庫的方法如下:

[root@cdio ~]# ldd /home/mysql/mysql/bin/mysqldump
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000337d200000)
libz.so.1 => /usr/lib64/libz.so.1 (0x000000337e600000)
librt.so.1 => /lib64/librt.so.1 (0x000000337d600000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000337c600000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000031ebe00000)
libm.so.6 => /lib64/libm.so.6 (0x000000337da00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000031e9e00000)
libc.so.6 => /lib64/libc.so.6 (0x000000337c200000)
/lib64/ld-linux-x86-64.so.2 (0x000000337be00000)

輸出可分三列解釋:

第一列:程序所依賴的庫

第二列:系統提供的與程序所需的庫的對應庫

第三列:庫加載的開始地址

Copyright © Linux教程網 All Rights Reserved