Arch Linux pacman 找不到 libcrypto.so.1.1 libcurl.so.4

Arch Linux pacman 找不到 libcrypto.so.1.1 libcurl.so.4

最近更新完Arch後執行pacman -Sy時出現錯誤


pacman: symbol lookup error: /usr/lib/libcurl.so.4: undefined symbol: SSLCTXsetalpnprotos


pacman: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file

這時候判斷應該是pacman出問題了,查詢一下pacman使用什麼函數庫依賴

$ sudo ldd $(which pacman)


ldd指令會將程式用到的函數庫列表出來並顯示出對應的位址及檔案路徑,可以透過此方法看看是不是有哪些函數庫缺少的:

    linux-vdso.so.1 (0x00007fff4a3ff000)
    libalpm.so.7 => /usr/lib/libalpm.so.7 (0x00007f16be091000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f16bdce4000)
    libcurl.so.4 => not found
    libgpgme.so.11 => /usr/lib/libgpgme.so.11 (0x00007f16bdab1000)
    libarchive.so.12 => /usr/lib/libarchive.so.12 (0x00007f16bd81c000)
    libcrypto.so.1.1 => not found
    /lib/ld-linux-x86-64.so.2 (0x00007f16be2bd000)
    libassuan.so.0 => /usr/lib/libassuan.so.0 (0x00007f16bd202000)
    libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007f16bcfff000)
    libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f16bcdf6000)
    libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f16bcbf1000)
    libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f16bc9c7000)
    liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f16bc7a4000)
    libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f16bc594000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007f16bc37e000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f16bc17a000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f16bbf5e000)


上面結果的確是有看到2個函數庫是找不到的,先從libcurl.so是由哪個套件所產生的


pacman -Ql|grep libcurl.so

利用Q查詢,並加上l將所有套件內的檔案全部列出,再透過grep將符合關鍵字的內容列出,結果如下:


curl /usr/lib/libcurl.so

原來是curl套件包含libcurl.so函數庫,可能會有新版的,查詢一下:


pacman -Qu curl

Q後加個u會將該套件是否有新的更新列出來


curl 7.54.0-2 -> 7.54.0-3

果然有新版的,那就更新一下


sudo pacman -Ss core/curl

上面指令主要是將curl套件更新,更新之時也會順帶將所有套件依賴一起更新


resolving dependencies... looking for conflicting packages... Packages (1) curl-7.54.0-3 Total Installed Size: 1.39 MiB Net Upgrade Size: 0.02 MiB

此時就按下y更新吧!經過一段時間後更新完成後,依照此方式將剩下的libcrypto.so也一起更新,更新完成後再重新開機後,執行pacman應該就解決問題。

上述的做法只是一個例子,如果還有其他套件有類似的問題時也能這麼處理。