编译 php,报错ld: symbol(s) not found for architecture arm64?

报错信息如下:

image.png

在网上查找方案,没有找到有价值的信息,请问应该如何解决这种情况呢?

阅读 2.9k
avatarAI BotBETA

遇到 ld: symbol(s) not found for architecture arm64 这类链接错误时,通常意味着你的程序或某个库在编译时没有正确地针对 Apple Silicon (M1 或更高版本的 ARM 架构) 进行编译。这里有几个步骤可以尝试解决这个问题:

1. 确认编译环境

确保你的开发环境已经为 ARM 架构做了优化。如果你使用的是 Homebrew,可以通过以下命令确保你的包管理器已经更新并且支持 ARM 架构:

brew update
brew upgrade

2. 检查 PHP 版本和依赖

确保你安装的 PHP 版本和所有相关依赖都是为 ARM 架构编译的。你可以从 PHP 官网或使用如 Homebrew 这样的包管理器安装 ARM 架构的 PHP。

3. 编译 PHP 时使用正确的配置

如果你从源代码编译 PHP,确保使用了正确的配置选项来支持 ARM 架构。通常,这不需要额外的配置,因为现代的编译系统(如 autoconf 和 configure 脚本)会检测并设置正确的架构。但如果你手动指定了某些编译选项,确保它们不包含任何可能导致问题的架构特定选项。

4. 检查外部库

如果你的 PHP 编译依赖于外部库(如 OpenSSL, MySQL, GD 等),确保这些库也是为 ARM 架构编译的。你可以使用如下命令来安装或更新这些库(以 OpenSSL 为例):

brew install openssl

5. 清理并重新编译

有时候,旧的编译文件或配置可能会干扰新的编译过程。尝试清理之前的编译结果并重新编译:

make clean
./configure [你的配置选项]
make
sudo make install

6. 检查链接器标志

检查你的 Makefile 或编译脚本中是否有任何特定的链接器(ld)标志,这些标志可能指定了错误的架构。通常,这些标志是自动生成的,但如果你手动修改了它们,可能会遇到问题。

7. 查看具体的错误信息

仔细查看链接器错误输出的详细信息,看看是哪个符号或库导致了问题。这可以帮助你确定是哪个组件或库需要更新或重新编译。

8. 寻求社区帮助

如果以上步骤都不能解决问题,你可以考虑在 Stack Overflow 或 PHP 的相关论坛发帖求助。在发帖时,提供尽可能多的信息,包括你的操作系统版本、PHP 版本、编译命令、完整的错误输出等。

希望这些步骤能帮助你解决问题!

3 个回答

你是不是按照错包了,你去下载arm64的包

新手上路,请多包涵

可能是在dns源代码中引用这些外部变量 php_parserr,res_9_dn_shkpname ,但是链接的时候找不到才报错,所以要找到包含这些变量或者说模块

  • 这些变量可能是在一些第三方中你没有引进来,所以使用

    brew install   libiconv curl libpng 等依赖项全部安装一下

    然后make clean ,重新编译一下试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题