我正在尝试运行逻辑应用程序来与我的逻辑分析器对话,并且在我在驱动程序下安装规则之后,我观察了下面的行为。
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo bash
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo ./Logic
# Application runs造成这种奇怪行为的原因是什么?
我正在运行Ubuntu 14.04。
发布于 2016-03-09 01:07:52
行为差异的一个合理解释是,工作命令和非工作命令加载不同的库,因为它们对库搜索路径LD_LIBRARY_PATH有不同的设置。还有其他环境变量可能很重要,但可能性较小,如LD_PRELOAD、PATH (如果./Logic是依赖于某些可执行文件的脚本,则错误消息与此不一致)等等。
为什么从bash的交互式实例调用命令不起作用,但直接从sudo调用命令的原因,一个合理的解释是,您正在.bashrc中设置这个环境,这是一个交互式bash实例运行的文件。运行sudo可以清除几乎所有的环境变量,因此sudo ./Logic可以工作;但是sudo bash后面跟着./Logic不能工作,因为运行bash会再次设置这些变量。
中设置环境变量。.profile(在会话开始时执行),而不是在.bashrc。您的症状是随着.bashrc中环境变量的变化而出现的问题之一。
LD_LIBRARY_PATH的设置可能根本不存在于安装文件中。添加一个隐藏系统库的目录可能是不兼容的一个来源。如果您需要它来运行特定的程序,那么只在运行该程序时设置LD_LIBRARY_PATH (通过外壳包装器,如果您想要自动化它),不要全局设置它。
https://unix.stackexchange.com/questions/268315
复制相似问题