无法在OSX 10.11.1的Shell中设置DYLD_FALLBACK_LIBRARY_PATH


11

在用于动态目录中除典型@rpath之外的目录中进行单元测试的Shell脚本中,我以前能够设置DYLD_FALLBACK_LIBRARY_PATH来设置包含这些库的目录。在10.11.1下,bash似乎忽略了设置此环境变量的尝试:

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

并且DYLD_FALLBACK_LIBRARY_PATH在printenv的输出中不存在。

这是10.11外壳中与安全相关的黑客吗?我找不到手册页或在线文档中记录的更改。



当然,install_name_tool是一个永久性的解决方案(我实际上已编写了脚本来设置构建环境)。为了在开发环境中进行快速测试和调试,麻烦的是必须临时创建库的副本,修改@rpath的更改,然后可能会忘记手动更改。DYLD_FALLBACK_LIBRARY_PATH和DYLD_LIBRARY_PATH在这些偶然的开发/测试周期中非常有用。
盖伊

Answers:


8

这是El Capitan中引入的系统完整性保护

文档是在这个苹果

基本上,Apple提供的所有OS X可执行文件都受到保护。和(来自较早的文档)

生成受系统完整性保护限制的进程的子进程,例如通过与NSTask捆绑在一起启动帮助程序进程或调用exec(2)命令,将重置该子进程的Mach特殊端口。启动受保护的进程时,将清除所有动态链接器(dyld)环境变量,例如DYLD_LIBRARY_PATH。

在这种情况下,sh被保护


感谢您的指导!我一直专注于SIP中的内核和其他文件系统保护。没有注意到这一变化。
盖伊

2
好的,这解释了现象的根源,但是我们现在应该如何测试未安装的库?我的意思是,make check当需要共享库时,我们该如何在El Capitan上进行写?
akim 2015年

大多数通过autoconf进行的make都应该以/ usr / local结尾,该目录仍可写-如果他们尝试在/ usr下进行其他操作,我会问作者对OS X(或Unix)的了解
user151019

如果有人在浪费时间试图了解dyld环境vars消失后发现了这一点,请考虑向Apple提交错误以使他们记录dyld / SIP交互。我已经做过,该错误的编号为rdar:// 30755019。(我希望他们随后会考虑记录其他此类陷阱...)
hmijail哀悼被辞职者

1
(我的意思是在dyld联机帮助页中记录SIP交互,在撰写本文时,它完全是关于它的。)
hmijail哀悼被辞职者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.