为什么逻辑应用程序除了直接在 sudo 下之外无法工作?

为什么逻辑应用程序除了直接在 sudo 下之外无法工作?

我正在尝试跑步逻辑应用程序与我的逻辑分析仪对话,在驱动程序下安装规则后,我观察到以下行为。

./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_PRELOADPATH(如果./Logic是依赖于某些可执行文件的脚本 - 但错误消息与此不一致)等。

为什么从 bash 的交互式实例调用该命令不起作用,但直接从sudoWorks 调用该命令的一个合理解释是,您正在.bashrcbash 的交互式实例运行的文件中设置此环境。运行sudo会清除几乎所有环境变量,因此sudo ./Logic有效;但sudo bash随后./Logic不起作用,因为运行bash会再次设置这些变量。

您应该在.profile(会话启动时执行)中设置环境变量,而不是在.bashrc。您的症状是改变环境变量的问题之一的特征.bashrc

LD_LIBRARY_PATH设置文件中可能根本不存在 的设置。添加隐藏系统库的目录可能会导致不兼容。如果您需要它来运行特定程序,请LD_LIBRARY_PATH仅在运行该程序时设置(如果您想自动化它,则通过 shell 包装器),不要全局设置它。

相关内容