抱歉,有一些必要的背景知识 - 您可以尝试跳转到问题标题。
自远古以来(无论如何,在上一个千年的某个地方),我创建了诸如/usr/gnu
和/usr/gcc
之类的目录来保存自定义编译的GNU软件,与系统目录中的任何内容分开。这对我来说非常适用于各种基于Unix的系统,包括自2002年以来的Mac OS X(Jaguar,10.2)。 (不使用/usr/local
的一个原因是IT管理部门维护它,并且它总是包含过时的代码 - 例如,它在大约5年前就可以使用Perl 4。使用其他名称可以避免与它们一起使用。 )
在Mac OS X 10.11 El Capitan中,Apple推出了SIP(系统完整性保护)系统(在What is the "rootless" feature of El Capitan, really?上描述'Ask Different')。这意味着我无法再创建/usr/gnu
或/usr/gcc
等目录,即使它们与Apple的任何内容脱节。
我发现之前在那些目录中的软件已被隔离在这些目录中(你的机器上的UUID会有所不同,我可能有两个,因为将El Capitan放到这台机器上是一个多步操作 - 一个分开冗长乏味的故事):
$ ls -1 /Library/SystemMigration/History/
Migration-7D74B534-AA54-4A4A-8DCC-A5C2F28E1A39
Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3
$
然后在QuarantineRoot
下的子目录中:
$ ls /Library/SystemMigration/History/Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3/QuarantineRoot/usr:
gcc gnu32 gnu64
$
但是,二进制文件是使用GCC和各种库编译的,因此它们目前不运行。例如:
$ otool -L bison
bison:
/usr/gnu64/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.1.0)
/usr/gnu64/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
/usr/gcc/v4.7.1/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
$ ./bison
dyld: Library not loaded: /usr/gnu64/lib/libintl.8.dylib
Referenced from: /Library/SystemMigration/History/Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3/QuarantineRoot/usr/gnu64/bin/./bison
Reason: image not found
Trace/BPT trap: 5
$
AFAIK,我甚至无法在/usr
中创建符号链接,以便gcc
或gnu64
指向其他地方(甚至不以root权限运行)。这是我用来在MachineA上创建软件的技术之一,在/work1
中有备用空间,用于/work5
中备用空间的另一个MachineB; /usr
中的符号链接允许代码位于/work1/gcc
或/work5/gcc
中,只要/usr/gcc
指向实际安装文件的位置,它就能正常工作。因此,这个SIP系统似乎杀死了几十年来成功使用的所有机制,这些机制基于能够在/usr
中创建至少某种目录条目。
后备位置是“重新编译软件 - 避免/usr
作为安装位置”。随着时间的推移,我计划使用/opt/gcc
和/opt/gnu64
代替/usr
下的等价物。我甚至考虑在我的主目录下使用空间,即使我不愿意;它是'系统'软件。
但是,我已经编译了很多软件,包括GCC的多个版本(从4.4.2到5.2.0),这将是一个令人讨厌的重新编译。事实上,我将不得不放弃旧版本的GCC,我不经常使用它们,但是当我需要它时它们很有用。
哦,我对GNU Tar的配置脚本(1.28和1.26)有问题。它测试它可以创建的目录树的深度,然后无法清理。 rm
和rmdir
都不能清理,即使我cd
层次结构到底部。即使剩下大量空间,它也会出现“磁盘空间不足”错误。我可以使用Finder将层次结构移动到废纸篓。但Finder也无法删除它们。 Bash有一个tizzy因为它无法解决当前目录的问题。这有点痛苦!所以重新编译和重新安装一些软件并不是一件容易的事。我甚至可能最终使用其他人编译的东西(MacPorts,HomeBrew等),但我希望能够编译自己的东西。我收到错误'操作无法完成,因为项目“confdir-14B ---”正在使用中“;重启可能是有序的,但我不相信它会解决这个问题。
答案 0 :(得分:0)
只是为了关闭:
如果您想要关注聊天链接,请务必这样做,但最终会得出同样的结论。