我正在尝试跑步逻辑应用程序与我的逻辑分析仪对话,在驱动程序下安装规则后,我观察到以下行为。
./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。
答案1
对于行为差异的一个合理解释是,工作命令和非工作命令正在加载不同的库,因为它们的库搜索路径设置不同LD_LIBRARY_PATH
。还有其他环境变量可能很重要,但不太可能,例如LD_PRELOAD
,PATH
(如果./Logic
是依赖于某些可执行文件的脚本 - 但错误消息与此不一致)等。
为什么从 bash 的交互式实例调用该命令不起作用,但直接从sudo
Works 调用该命令的一个合理解释是,您正在.bashrc
bash 的交互式实例运行的文件中设置此环境。运行sudo
会清除几乎所有环境变量,因此sudo ./Logic
有效;但sudo bash
随后./Logic
不起作用,因为运行bash
会再次设置这些变量。
您应该在.profile
(会话启动时执行)中设置环境变量,而不是在.bashrc
。您的症状是改变环境变量的问题之一的特征.bashrc
。
LD_LIBRARY_PATH
设置文件中可能根本不存在 的设置。添加隐藏系统库的目录可能会导致不兼容。如果您需要它来运行特定程序,请LD_LIBRARY_PATH
仅在运行该程序时设置(如果您想自动化它,则通过 shell 包装器),不要全局设置它。