我在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环境variables中。 如果它在ld.so.conf请将其删除并运行ldconfig 。 同上,如果它在默认LD_LIBRARY_PATH – 检查/etc/environment ,系统范围的启动脚本,你的.bashrc和.bash_profile等,看看它可能已经被添加。
在库searchpath上有一个不兼容的libstdc++是一个糟糕的主意。 如果Pervasive的安装程序这样做,报告一个错误,这是完全不能接受的,(如你所发现的)可能会破坏你的系统。
一旦它不再在你的图书馆searchpath上,其他的一切都将恢复工作,但驱动程序将无法正常工作。 您可以通过运行使用它们的程序来使它们工作,该程序使用设置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 "$@"
"$@"是一个“魔术”variables,它扩展到传递给shell脚本的原始参数。 将脚本保存为myprogram_wrapper.sh ,编辑/path/to/my/program以指向要启动的应用程序可执行文件的位置,然后使用chmod a+x my_program_wrapper.sh使其可执行。 然后,您可以使用./my_program_wrapper.sh启动该应用程序,或者将该包装程序添加到桌面快捷方式等等中以代替原始应用程序。
这就是像Adobe Reader这样捆绑在一起的许多软件如何在不影响系统其他部分的情况下使用捆绑的库来启动它自己。 这不是最好的方法(这是使用rpath连接),但它是确定的。
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修复。