![PSQL 64位驱动程序错误](https://linux22.com/image/601189/PSQL%2064%E4%BD%8D%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF.png)
我在 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)
任何帮助都将非常有帮助。
答案1
看起来您或安装程序已将 添加/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 "$@"
"$@"
是一个“魔法”变量,它扩展到传递给 shell 脚本的原始参数。将脚本另存为,例如,myprogram_wrapper.sh
编辑/path/to/my/program
以指向要启动的应用程序可执行文件的位置,然后使用chmod a+x my_program_wrapper.sh
它使其可执行。然后,您可以使用启动应用程序./my_program_wrapper.sh
或将该包装器添加到桌面快捷方式等来代替原始应用程序。
这就是许多以二进制文件形式捆绑的软件(如 Adobe Reader)使用其捆绑库自行启动而不影响系统其余部分的方式。这不是最好的方法(最好使用rpath
链接),但没问题。
答案2
Pervasive 论坛上有人建议这样修复:
由于某些版本冲突,我需要移动一些文件才能运行“apt-get”而不会抱怨版本。
sudo mv /usr/local/psql/lib/libgcc_s.so.1 /usr/local/psql/lib/libgcc_s.so.1.org
sudo mv /usr/local/psql/lib/libstdc++.so.6 /usr/local/psql/lib/libstdc++.so.6.org
之后不再运行“sudo ldconfig”
这可行,但在阅读@CraigRinger 的回答后,我认为这似乎有点儿不妥。不幸的是,我了解的还不够多,无法实施修复LD_LIBRARY_PATH
。