1
El Capitan,进行检查,DYLD_LIBRARY_PATH
我使用通常的Unix工具集开发应用程序:编译器make,和共享库。传统上,该过程类似于 ./configure,可以针对运行机器的功能量身定制源代码, make,实际上会编译共享库,可执行文件等, make check,它会在我们安装软件包之前运行测试, make install,如果程序包运行正常,最后(可选) make installcheck,以确保安装正常。 在期间make,共享库和可执行文件以最终形式进行编译:可执行文件在最终目标位置依赖于共享库进行编译(即,它们依赖于库,/usr/local/lib尽管它们尚不存在,但仍在构建中)树)。然后make install,大致来说,它只是cp用于从构建树到最终位置安装库和可执行文件。 在此make check阶段中,我们正在运行已卸载的程序:共享库,可执行文件和辅助文件仍在构建树中。要运行测试,您必须设置一些自定义环境变量(例如,告诉您的程序辅助数据文件不在/usr/local/share源树中,而是在源树中),以及一些系统环境变量,以告诉您的共享库加载器看起来共享库。传统Unices上的环境变量是LD_LIBRARY_PATHOS X上的DYLD_LIBRARY_PATH。这已经工作了几十年了。 但是现在,El Capitan打破了这一点。 $ (export FOO=foo; env) | grep foo FOO=foo $ (export DYLDFOO=foo; env) | grep foo DYLDFOO=foo $ (export DYLD_FOO=foo; env) | grep foo $ 现在,启用SIP后,no不会DYLD_*从进程导出到其子进程。 所以我的问题是:我们如何运行未安装的程序?能够运行传统的Unix序列应遵循的程序是什么./configure && make && make check? 请,没有诸如“ make install先运行”之类的答案。那不是重点。我是一名开发人员,因此我经常执行“ …