Fedora

編譯 GnuPG 將 gpg2 連結到 /lib 而不是 /usr/local/lib/

  • October 3, 2016

有時我必須在伺服器上安裝新軟體包。如果我很幸運,我可以找到一個 RPM,否則,我會撞到牆上並嘗試編譯一個包。

這次我要編譯 GnuPG 以獲得 2.1.15 版本。所以我下載了所有依賴的庫,執行configure && make install,最後我重複gnupg-2.1.15包本身,一切順利,make把所有的東西都放在/usr/local/中,包括庫和二進製文件。感覺很幸運,我檢查了版本:

$ /usr/local/bin/gpg2 --version
gpg: Fatal: libgcrypt is too old (need 1.7.0, have 1.6.6)

哎呀。發生了什麼,所以我檢查了連結庫:

$ ldd /usr/local/bin/gpg2
linux-vdso.so.1 (0x00007fff15db4000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007fcab5431000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fcab521d000)
libassuan.so.0 => /lib64/libassuan.so.0 (0x00007fcab5009000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcab4c47000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcab4a43000)
/lib64/ld-linux-x86-64.so.2 (0x00005615f5c77000)

呃,舊的內置系統庫已被連結。我不怎麼編譯軟體,所以我被困在這裡試圖弄清楚如何通過 configure(或其他?)告訴 gcc 來連結剛剛安裝在 /usr/local/lib/ 中的依賴庫

這是我對 gnupg-2.1.15 的配置命令:

./configure --prefix=/usr/local --with-libgpg-error-prefix=/usr/local/\
--with-libgcrypt-prefix=/usr/local --with-libassuan-prefix=/usr/local\
--with-ksba-prefix=/usr/local --with-npth-prefix=/usr/local

在安裝了最新更新和核心以及 gcc 6.2.1 的 Fedora 24 上執行它。

感謝您花時間考慮我的問題。

似乎您需要特定版本的程序及其依賴庫,或者您正在嘗試使用您的系統。

您可以使用環境變數LD_LIBRARY_PATH來修改連結器的搜尋路徑,以便找到您的新庫並使用它來代替舊庫。這是一個提供有關它的更多詳細資訊的頁面。

export LD_LIBRARY_PATH=/usr/local/path/to/lib/directory您可以在執行程序之前嘗試。要使其永久化,您可以修改ldconfig搜尋路徑(通常是 下的文件/etc/ld.so.conf.d),然後呼叫ldconfig以更新記憶體。

引用自:https://serverfault.com/questions/806708