dyld: DYLD_环境变量被忽略,因为主可执行文件(/usr/bin/sudo)设置了setuid或setgid。

48

自从更新到10.8版本后,当我尝试进行sudo命令时,会出现以下错误,这相当令人恼火。

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

那是什么意思?希望有人能帮忙。


对我来说,我发现如果安装了XCode,可能还有命令行工具组件,这个警告就会停止。 - EMiller
7个回答

43

这似乎是在10.8版本中引入的一个错误,参见此报告。据我所知,唯一的解决方法是不默认设置DYLD_LIBRARY_PATH或LD_LIBRARY_PATH,只在需要时进行设置。


1
好的。我刚在我的 .bash_profile 文件中注释掉了 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH。我不太清楚我做了什么,但至少这个烦人的消息停止了。希望这很快就能得到解决。 - eneskaya
@eneskaya: 我记得我曾经在某个地方读到过一些有缺陷的mysql版本,它们内嵌了错误的库路径。设置DYLD_LIBRARY_PATH就是解决办法。如果mysql对你仍然有效,那么我猜他们已经修复了这个问题。 - Erik Hesselink
@eneskaya:你在使用MySQL吗?MySQL对你仍然有效吗? - tholu
1
我在~/.profile中添加了unset LD_LIBRARY_PATH,烦人的消息消失了。 - neevek
4
如果我这样做,会导致 SQL 数据库出问题。 - jahrichie
2
我建议使用以下的sudo函数:sudo () { ( unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH; exec command sudo $* ) }。它在BASH中也能工作,而且非常优雅。只需将其放置在您的.bashrc文件中并运行source命令(. .bashrc),即可使用。 - speeves

20
在zsh中:
sudo () { ( unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH; exec command sudo $* ) }

这将在一个子shell中生成,其中sudo抱怨的环境变量未设置,然后通过exec执行sudo(以便不必要的父shell立即退出)。
我将把它留给读者练习转换为bash等其他语言。

1
尝试将此命令行放入 /etc/bashrc(需要 chmod +w /etc/bashrc 允许写入权限),警告消息已消失,谢谢! - Ken Pega

7

不确定官方解决方法在哪里,但我通过这个 bashrc hack 解决了它,因为我无法忍受再看到那该死的警告。

将此内容放入 /etc/bashrc 或您本地保存的任何位置。

# set DYLD_* for my normal programs
DYLD_LIBRARY_PATH='..'
 
# set an alternative sudo
thesudo()
{
# back up the DYLD_* variables
local BACK=$DYLD_LIBRARY_PATH
# unset DYLD_*
unset DYLD_LIBRARY_PATH
# calling sudo
/usr/bin/sudo "$@"
# restore DYLD_* after sudo finished
export DYLD_LIBRARY_PATH=$BACK
}
 
# redirect sudo
alias sudo=thesudo

5

使用django(用于Web的python)和MySQLdb(Mysql-Python模块)连接mysql的用户需要设置该变量。目前我只是保留警告。


尽管我使用MySQLdb,但Pinkos的答案对我有效。 - F Lekschas

1
这个问题在 OS X Mavericks(10.9)上终于得到解决,sudo 不再显示此消息。

1

看起来已经提到的“修复”只是一些解决方法,可能并不适用于所有用户。这是一个已知的错误,苹果公司(至少)已经意识到了:http://openradar.appspot.com/11894054


-1

不确定这是否是真正的解决方法,但当我运行“清理构建文件夹”时,此错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接