PSQL 64 位驅動程序錯誤
我在 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
。同上,如果它在 defaultLD_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
或將該包裝器添加到桌面快捷方式等以代替原始應用程序。這就是許多捆綁為二進製文件的軟體(如 Adobe Reader)在不影響系統其餘部分的情況下使用捆綁的庫啟動自身的方式。這不是最好的方法(即使用
rpath
連結),但沒關係。