Apt

PSQL 64 位驅動程序錯誤

  • November 23, 2012

我在 Hyper-V 下安裝了 Ubuntu 12.04 64 位伺服器。我已經安裝了 Pervasive 64 位 SQL 驅動程序,以便可以每天執行股票更新腳本(從執行 Exchequer 軟體/PSQL 數據庫的另一臺本地伺服器更新外部 MySQL 數據庫)。

正如我在嘗試執行任何 apt-get 命令時發現的那樣,這些驅動程序似乎存在衝突:

apt-get update
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)

任何幫助都會很棒。

看起來您或安裝程序已添加/usr/local/pgsql/lib64/到環境變數/etc/ld.so.conf或添加到LD_LIBRARY_PATH環境變數中。如果它在ld.so.conf刪除它並執行ldconfig。同上,如果它在 default LD_LIBRARY_PATH- check /etc/environment,系統範圍的啟動腳本,你的.bashrc等等.bash_profile,看看它可能被添加到哪裡。

libstdc++在庫搜尋路徑上存在不兼容是一個糟糕的主意。如果 Pervasive 的安裝程序這樣做,請報告錯誤,這是完全不可接受的,並且(正如您所發現的)可能會破壞您的系統。

一旦它不再在您的庫搜尋路徑上,其他一切都將恢復工作,但驅動程序將無法工作。您可以通過執行使用它們的程序和設置的包裝腳本來使它們工作,LD_LIBRARY_PATH="/usr/local/pgsql/lib64/:${LD_LIBRARY_PATH}"但前提是這些程序本身不需要其他libstdc++.


包裝腳本可以很簡單:

#!/bin/sh
set -e
LD_LIBRARY_PATH="/usr/local/pgsql/lib64/:${LD_LIBRARY_PATH}"
/path/to/my/program "$@"

"$@"是一個“魔法”變數,它擴展為傳遞給 shell 腳本的原始參數。將腳本另存為,例如myprogram_wrapper.sh,編輯/path/to/my/program以指向您要啟動的應用程序執行檔的位置,並使用chmod a+x my_program_wrapper.sh它使其可執行。然後,您可以使用該應用程序啟動該應用程序,./my_program_wrapper.sh或將該包裝器添加到桌面快捷方式等以代替原始應用程序。

這就是許多捆綁為二進製文件的軟體(如 Adob​​e Reader)在不影響系統其餘部分的情況下使用捆綁的庫啟動自身的方式。這不是最好的方法(即使用rpath連結),但沒關係。

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