知識點:1. 往/lib和/usr/lib裡面加東西,是不用修改/etc/ld.so.conf的,但是完了之後要調一下ldconfig,不然這個library會找不到1、如果使用 ldd 命令時沒有找到對應的共享庫檔案和其具體位置,可能是兩種情況引起的:
a 共享庫沒有安裝在該系統中;
b 共享庫儲存在 /etc/ld.so.conf 檔案列出的搜尋路徑之外的位置。
通常情況下,許多開放源**的程式或函式庫都會預設將自己安裝到 /usr/local 目錄下的相應位置(如:/usr/local/bin 或 /usr/local/lib),以便與系統自身的程式或函式庫相區別。而許多 linux 系統的 /etc/ld.so.conf 檔案中預設又不包含 /usr/local/lib。因此,往往會出現已經安裝了共享庫,但是卻無法找到共享庫的情況。具體解決辦法如下:
檢查 /etc/ld.so.conf 檔案,如果其中缺少 /usr/local/lib 目錄,就新增進去;注意:在修改了 /etc/ld.so.conf檔案或者在系統中安裝了新的函式庫之後,需要執行乙個命令:ldconfig ,該命令用來重新整理系統的共享庫快取,即 /etc/ld.so.cache 檔案。為了減少共享庫系統的庫搜尋時間,共享庫系統維護了乙個共享庫 so 名稱的快取檔案/etc/ld.so.cache。因此,在安裝新的共享庫之後,一定要執行 ldconfig 重新整理該快取。
2、使用nm命令也可以獲取庫函式的資訊;nm命令可以列出乙個函式庫檔案中的符號表,它對靜態的庫函式和共享的庫函式都能起作用。
2. 想往上面兩個目錄以外加東西的時候,一定要修改/etc/ld.so.conf,然後再呼叫ldconfig,不然也會找不到
比如安裝了乙個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,這時 就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,儲存過後ldconfig一下,新的library才能在 程式執行時被找到。
linux 安裝原始碼後的操作 (提示編譯缺少庫檔案),或沒有編譯新程式沒有去編譯庫
如:curl原始碼編譯需要openss編譯後的庫檔案,才能編譯出https,然而openssl原始碼編譯後庫檔案存放到了/usr/local/lib下,導致在/usr/lib下找不到
安裝原始碼
./configure
make
make install
原始碼安裝完成後生成的一些動態庫或靜態庫會生成到/usr/local/lib下
預設情況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫檔案,安裝其他程式需要用到該原始碼的庫檔案時會報錯
以下有兩種解決方法:
1 在編譯原始碼時指定安裝到/usr下,這樣庫檔案就會放在/usr/lib中
如:./configure --prefix=/usr
2 將/usr/local/lib加入到/etc/ld.so.conf中
(1)將/usr/local/lib加入到/etc/ld.so.conf也是必須的,這樣以後安裝東東到local下,就不會出現這樣的問題了
新增方法也極其簡單,將庫檔案的絕對路徑直接寫進去就ok了,一行乙個。例如:
/usr/x11r6/lib
/usr/local/lib
/opt/lib
(2)當安裝完一些庫檔案,(例如剛安裝好glib),或者修改ld.so.conf增加新的庫路徑後,需要執行一下/sbin/ldconfig
參考
linux的原始碼安裝
linux的軟體安裝自然是yum最為簡單,但是某些新發布的軟體並沒有提供rpm包,只有原始碼,這時只能用原始碼安裝了。思路如下 xshell的話 要安裝irzsz軟體 rz 檔案從windows傳進虛擬機器 sz 檔案從虛擬機器傳出 我用的是nginx 2 解壓 root nullpointerex...
linux 原始碼安裝
原始碼的安裝一般由3個步驟組成 配置 configure 編譯 make 安裝 make install 具體的安裝方法一般作者都會給出文件,這裡主要討論配置 configure configure是乙個可執行指令碼,它有很多選項,使用命令.configure help輸出詳細的選項列表,如下 ba...
linux原始碼安裝
原始碼的安裝一般由3個步驟組成 配置 configure 編譯 make 安裝 make install configure是乙個可執行指令碼,它有很多選項,在待安裝的原始碼路徑下使用命令.configure help輸出詳細的選項列表。其中 prefix選項是配置安裝的路徑,如果不配置該選項,安裝...