当前位置: 首页 > 知识库问答 >
问题:

使用 homebrew 编译安装 php 到指定目录,"No such file or directory" 和 "Operation not permitted"?

司徒锐进
2024-09-02

问题

修改 formula 文件,将

  --prefix=#{prefix}

修改为

 --prefix=/Application/xxx/php

尝试将 php@5.6 安装到这个目录,然后执行命令:

brew install --formula -s  /xxx/homebrew-php/Formula/php@5.6.rb

make instll 环节报错:

image.png

尝试1

将 formula 中的

system "make", "install"

修改为

system "sudo make install"

无效。

尝试2

将目录 chown -R ${whoami} /xxx/ 无效

尝试 3

重新安装 homebrew,无效

共有1个答案

曾奇略
2024-09-02

在 macOS 上使用 Homebrew 编译安装软件时遇到 "No such file or directory""Operation not permitted" 错误通常与权限、目录不存在或 Homebrew 的配置有关。针对你提到的情况,有几个可能的解决方案和考虑因素:

  1. 检查目录是否存在
    确保 /xxx/homebrew-php/Formula/php@5.6.rb 路径中的目录和文件确实存在。你可以使用 ls 命令来检查目录和文件:

    ls -l /xxx/homebrew-php/Formula/php@5.6.rb

    如果文件不存在,你需要找到正确的文件路径。

  2. Homebrew 的 Tap 管理
    通常不建议直接指定 .rb 文件来安装,因为这绕过了 Homebrew 的 tap 管理机制。如果你正在尝试安装一个非官方的 PHP 版本,考虑先添加相应的 tap:

    brew tap <用户名>/homebrew-php

    然后直接使用:

    brew install php@5.6
  3. 权限问题

    • 如果你在编译过程中遇到权限问题,确保你有足够的权限来访问目标目录。通常,Homebrew 会管理自己的目录(如 /usr/local),并且不需要 sudo 来安装大多数包。
    • 如果你确实需要安装到非标准目录,可能需要调整该目录的权限或使用 sudo,但这通常不推荐用于 Homebrew 管理的包。
  4. 使用 sudo 的问题
    修改 formula 中的 system "make", "install"system "sudo make install" 可能不会生效,因为 Homebrew 会尝试以特定的用户身份运行命令,而不是直接通过 sudo。此外,直接在 Homebrew formula 中使用 sudo 可能会破坏 Homebrew 的沙箱环境,导致不可预测的行为。
  5. 检查 SELinux 或其他安全策略
    如果你的系统启用了 SELinux 或其他类似的安全策略,可能会阻止某些操作。检查是否有相关策略阻止了 Homebrew 的操作。
  6. 查看 Homebrew 日志
    查看 Homebrew 的输出和日志文件,以获取更多关于错误的信息。这可能会提供更多关于缺失文件或权限问题的线索。
  7. 清理和重新安装 Homebrew
    如果以上步骤都无法解决问题,考虑清理 Homebrew 的缓存并重新安装:

    brew cleanup
    brew uninstall php@5.6
    brew tap <用户名>/homebrew-php  # 如果之前未添加 tap
    brew install php@5.6

如果以上方法都不能解决你的问题,可能需要更详细地检查你的系统配置或考虑其他安装方式。

 类似资料:
  • 问题内容: 运行时是否可以指定目标目录? 问题答案: 您可以使用以下选项: 软件包将安装在中。之所以需要,是因为npm否则可能会选择层次结构中更高层次的已存在目录。(请参阅文件夹上的npm文档。)

  • 如题 编译php-7.4.30 在编译的时候使用命令 提示不支持 求解如何设置

  • 我刚刚升级到优胜美地。我使用的是Apache 2.2,但升级包括2.4。在经历了一些配置噩梦之后,我最终使用Homebrew重新安装了2.4。我有它大部分配置。但是,当我使用PHP的旧httpd.conf设置时,我得到以下错误: 未找到符号:_unixd_config\n引用自:/usr/local/opt/php55/libexec/apache2/libphp5。因此\n应在:/usr/loc

  • pc linux依赖环境 ~$ sudo dpkg --add-architecture i386 ~$ sudo apt-get update ~$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 libx11-6:i386 gtk2-engines:i386 lib32ncurses5 lib32z1 libxt

  • pc linux依赖环境 ~$ sudo dpkg --add-architecture i386 ~$ sudo apt-get update ~$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 libx11-6:i386 gtk2-engines:i386 lib32ncurses5 lib32z1 libxt