Fedora
編譯 GnuPG 將 gpg2 連結到 /lib 而不是 /usr/local/lib/
有時我必須在伺服器上安裝新軟體包。如果我很幸運,我可以找到一個 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
以更新記憶體。