PSQL 64 位驱动程序错误

Ale*_*ove 4 psql libraries apt

我在 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)
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒。

Cra*_*ger 5

看起来您或安装程序已添加/usr/local/pgsql/lib64//etc/ld.so.conf或添加到LD_LIBRARY_PATH环境变量。如果它在ld.so.conf删除它并运行ldconfig。如果它在默认同上LD_LIBRARY_PATH-检查/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 "$@"
Run Code Online (Sandbox Code Playgroud)

"$@"是一个“魔法”变量,它扩展为传递给 shell 脚本的原始参数。将脚本另存为,例如,myprogram_wrapper.sh编辑/path/to/my/program以指向要启动的应用程序可执行文件的位置,并使用chmod a+x my_program_wrapper.sh它使其可执行。然后,您可以使用./my_program_wrapper.sh该包装器启动该应用程序或将该包装器添加到桌面快捷方式等,以代替原始应用程序。

这就是许多捆绑为二进制文件的软件(如 Adob​​e Reader)如何通过捆绑库启动自身而不影响系统的其余部分。这不是最好的方法(即使用rpath链接),但没关系。