gpt4 book ai didi

Mac OS X El Capitan 可以运行为 Yosemite 编译的需要/usr/gnu64/lib 中的库的软件吗?

转载 作者:太空狗 更新时间:2023-10-29 17:26:23 24 4
gpt4 key购买 nike

抱歉,需要一些背景知识——您可以尝试跳到 问题 标题。

从远古时代(无论如何,在上个千年的某个地方),我已经创建了诸如 /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(​​系统完整性保护)系统(在“Ask Different”中的 What is the "rootless" feature of El Capitan, really? 中进行了描述)。这意味着我不能再创建诸如 /usr/gnu 之类的目录。或 /usr/gcc ,即使它们与 Apple 拥有的任何东西都不相交。

我发现以前在这些目录中的软件已经被隔离在这样的目录中(你的机器上的 UUID 会不同,我可能有两个,因为将 El Capitan 放到这台机器上是一个多步骤操作——一个单独的 long 和无聊的故事):

$ 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 中创建符号链接(symbolic link)这样 gccgnu64指向其他地方(甚至没有以root权限运行)。这是我用来在 MachineA 上创建软件的技术之一,在 /work1 中有空闲空间。用于在 /work5 中有空闲空间的另一台 MachineB ; /usr 中的符号链接(symbolic link)允许代码位于 /work1/gcc/work5/gcc只要 /usr/gcc 就可以正常工作指向文件实际安装的位置。所以,这个 SIP 系统似乎扼杀了几十年来成功使用的所有机制,这些机制的前提是能够在 /usr 中创建至少某种目录条目。 .

问题
  • 有没有一种明智的方法可以让旧的二进制文件在不禁用 SIP 并且不必立即重新编译所有内容的情况下运行?

  • 后备位置是“重新编译软件 - 避免 /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 有点头晕,因为它无法确定当前目录是什么。都挺痛苦的!因此,重新编译和重新安装一些软件并非易事。我什至可能最终会使用其他人编译的东西(MacPorts、HomeBrew 等),但我希望能够自己编译。我收到错误“操作无法完成,因为项目“confdir-14B---”正在使用中';可能需要重新启动,但我不相信它会解决这个问题。

    最佳答案

    只是为了关闭:

  • 不;似乎没有办法避免重新编译代码。

  • 如果您想关注聊天链接,请务必这样做,但最终会得出相同的结论。

    关于Mac OS X El Capitan 可以运行为 Yosemite 编译的需要/usr/gnu64/lib 中的库的软件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074492/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com