回文章列表
作者Storm.bbs@bbs.sayya.org (風) 看板: linux
標題Re: [問題] 執行時找不到shared library
時間SayYA 資訊站 (2008/04/29 Tue 11:17:50)
※ 引述《goo666.bbs@ptt.cc》之銘言:
> 我在網路上下載一包程式
> 解壓縮後,內含一個makefile,依說明做make、make install後,
> 他安裝library和產生執行檔,
> 但是當我輸入./clitest要執行的時候,
> 卻顯示找不到shared library: libcli.so.1.9
> 請問該怎麼解決?
> 編譯、執行過程
> http://140.134.4.20/~d8900534/libcli_cmd.png
> 安裝的library檔案
> 安裝在/usr/local/lib
> http://140.134.4.20/~d8900534/libcli_lib.png

    這個是因為那個 Makefile 的 install: 部分似乎沒有執行 ldconfig 的關係。
    Linux 的 ld 會先把 *.so 的資訊,根據 /etc/ld.so.conf 的設定,預先作
    cache。由於你的 Makefile 在把 libcli.so.1.9 複製到 /usr/local/lib 之後
    並沒有執行 ldconfig,所以即使 dynamic library 確實在那邊,但 ld.so
    並『不知道』其實檔案在那邊。解決的方法自然是以 root 權限跑一次 ldconfig。

    首先請先確認 /etc/ld.so.conf 檔案的內容,看看 "/usr/local/lib" 是否
    有被包含進去。例如:

$ cat /etc/ld.so.conf
/usr/lib
/usr/local/lib

    如果沒有看到 "/usr/local/lib" 在裏面的話,現在蠻多系統會在 /etc/ld.so.conf
    中使用 "include" 指令來引入在其他目錄的設定檔,通常是 "/etc/ld.so.conf.d/"
    裏面。由於你的系統從圖上看起來是 Red Hat 系統,手邊已經沒有 Red Hat 系統
    可以確認,不過 Mandriva 上,/etc/ld.so.conf 確實有用 include 來引入
    在 /etc/ld.so.conf.d/ 下的設定檔。例如:

$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
$ ls -l /etc/ld.so.conf.d/
總計 8
-rw-r--r-- 1 root root 64 2007-04-04 06:38 i486-linux-gnu
-rw-r--r-- 1 root root 44 2007-10-24 20:53 libc.conf
$ grep '/usr/local/lib' /etc/ld.so.conf.d/*
/etc/ld.so.conf.d/libc.conf:/usr/local/lib

    上面的例子裏面,可以發現 /etc/ld.so.conf 並沒有包含 "/usr/local/lib",但是
    有由 /etc/ld.so.conf.d/ 目錄中引入 *.conf,而 /etc/ld.so.conf.d/libc.conf
    裏面有包含了 "/usr/local/lib" 路徑。

    假設萬一真的發現不管是 /etc/ld.so.conf 或 /etc/ld.so.conf.d/*.conf 中
    都沒有看到 "/usr/local/lib" 的話,請自己加入。加入後,以 root 權限執行
    ldconfig,這樣應該就可以解決你的問題。

$ sudo ldconfig


--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: adsl-070-155-125-254.sip.asm.bellsouth.net
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻