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

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

袁运良
2024-08-01

报错信息如下:

image.png

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

共有2个答案

章飞虎
2024-08-01

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

子车劲
2024-08-01

遇到 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 版本、编译命令、完整的错误输出等。

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

 类似资料:
  • 背景: 在vue3+ts+vite项目中: vue文件:import.meta.env代码能正常访问 ts文件:import.meta.env文件有编译报错 尝试1: 在tsconfig.json中添加"types": [ "vite/client" ]

  • 主要内容:gcc -S指令我们知道,从 C、C++源代码生成可执行文件需要经历 4 个过程,分别为预处理、编译、汇编和链接。其中,《 GCC -E选项:对源程序做预处理操作》一节以 demo.c 源程序文件为例,演示了如何使用 GCC 执行预处理操作,并生成了相应的 demo.i 预处理文件。 [root@bogon demo]# cat demo.c #include <stdio.h> int main(){    p

  • 本文向大家介绍编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法,包括了编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天在64位Red Hat Enterprise Linux AS releas

  • 我试图在openshift上使用http://www.sitepoint.com/nginx-php5-5-phalcon-openshift/编译phalcon php 一切正常,但我无法完成模块编译:没有错误,只是ssh会话正在关闭。 cd app-root/runtime/repo/cphalcon/build./install 创建libtool configure:正在创建。/confi

  • ts文件中,Math.round和parseInt函数中包裹同样的表达式,为什么parseInt方法会有报错? Math.round正常编译,parseInt编译报错

  • PHP代码的编译 PHP是解析型高级语言,事实上从Zend内核的角度来看PHP就是一个普通的C程序,它有main函数,我们写的PHP代码是这个程序的输入,然后经过内核的处理输出结果,内核将PHP代码"翻译"为C程序可识别的过程就是PHP的编译。 那么这个"翻译"过程具体都有哪些操作呢? C程序在编译时将一行行代码编译为机器码,每一个操作都认为是一条机器指令,这些指令写入到编译后的二进制程序中,执行

  • 问题内容: 到目前为止,我已经在ubuntu系统上安装了所有交叉编译软件包,但是遇到了问题,需要一些帮助。 这是我需要交叉编译的目标计算机。编译时应使用哪些标志? 问题答案: 给出以下列表, gcc-4.7-aarch64-linux-gnu-GNU C编译器 gcc-4.7-arm-linux-gnueabi-GNU C编译器 gcc-4.7-arm-linux-gnueabi-base-GCC

  • 问题内容: 当我在Netbeans中构建并运行程序时,它可以正常工作。但是当我尝试“ mvn compile”时,使用相同的pom.xml文件会出现以下错误: 我的Java版本不是1.3,这里是“ mvn -version”的结果 这是第53行: 问题答案: 问题是在Maven2中默认使用和 您可以通过将其添加到pom中来解决此问题: 将其放在最顶层的父pom中是很实际的,这样您派生的pom不需要