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

编译后的php复制到另一台mac,运行php -v 报错:Symbol not found:libiconv?

邹博裕
2024-09-24

配置命令

./configure \
xxx
xxx
--with-iconv=/Applications/xx/lib/libiconv/1.17 

make && make instll 之后复制到另一台mac上,并且将/Applications/xx/lib/libiconv/1.17 目录拷贝到目标mac上,运行

php -v

报错如下:

image.png

共有1个答案

谷泳
2024-09-24

出现“Symbol not found: libiconv”这类错误通常意味着PHP运行时找不到或无法正确加载libiconv库。这可能是因为库文件的位置没有正确设置,或者库文件本身在新环境中不兼容。以下是一些可能的解决步骤:

  1. 确认库文件位置
    确保libiconv库文件(如libiconv.2.dylib)位于你的新Mac上正确的路径中,并且该路径被添加到了系统的库搜索路径中。你可以使用otool -L命令来查看PHP可执行文件依赖的库文件及其路径。

    otool -L /path/to/your/php-executable

检查输出中是否有指向libiconv的路径,并确保这个路径是正确的。

  1. 设置环境变量
    如果库文件路径不正确,你可以通过设置DYLD_LIBRARY_PATH环境变量来指定额外的库搜索路径。在你的shell配置文件中(如.bash_profile.zshrc),添加以下行:

    export DYLD_LIBRARY_PATH=/Applications/xx/lib/libiconv/1.17:$DYLD_LIBRARY_PATH

然后重新加载配置文件或重新登录shell。

  1. 使用install_name_tool修改库依赖
    如果PHP可执行文件或某个依赖的库文件硬编码了错误的libiconv路径,你可以使用install_name_tool来更改这些路径。首先,找到需要修改的库文件,然后使用如下命令:

    install_name_tool -change old-path/to/libiconv.2.dylib new-path/to/libiconv.2.dylib /path/to/php-executable

替换old-path/to/libiconv.2.dylibnew-path/to/libiconv.2.dylib为实际的旧路径和新路径。

  1. 重新编译PHP
    如果可能的话,考虑在新Mac上重新编译PHP,并确保在配置时指定正确的libiconv路径。这样可以确保所有依赖都被正确处理。
  2. 检查系统兼容性
    确保你的libiconv版本与你的PHP版本和操作系统版本兼容。有时候,库文件可能需要在目标系统上重新编译才能正确工作。
  3. 使用系统提供的库
    如果可能,考虑使用Mac系统自带的libiconv库,而不是手动安装。这可以通过配置PHP时不指定--with-iconv选项来实现,让PHP使用系统默认的iconv实现。

通过以上步骤,你应该能够解决“Symbol not found: libiconv”的问题。如果问题仍然存在,请检查是否有其他配置或环境问题影响了PHP的运行。

 类似资料:
  • 注意,没翻译的这节仅代表作者05年的观点。 As with the UNIX build, the first step to preparing a Windows build is to unpack the source tarball. By default, Windows doesn't know what to do with a .tar.gz file. In fact, if

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

  • 问题内容: 我需要在用户操作时执行目录副本,但是目录很大,因此我希望能够执行这样的操作,而用户却不知道完成副本所花费的时间。 任何建议将不胜感激。 问题答案: 假设它在Linux机器上运行,我总是这样处理: 这将启动命令,将命令输出重定向到,并将进程ID写入。 这样一来,您可以轻松地监视该进程在做什么以及它是否仍在运行。

  • 我使用PHPMailer从服务器发送电子邮件,它一直运行良好。我们最近将网站从Windows Server 2012移动到Mac OS X 10.10。 我很难让抄送收件人工作,因为它在Mac OS X上运行。 我从一个数组中添加CC收件人: 电子邮件正在发送,但没有抄送地址被包括在内-似乎它们以某种方式被转换成密件抄送地址,因为它们的电子邮件被发送到抄送地址,但它们没有列在抄送地址部分...查看

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

  • 问题内容: 我在Mavericks上运行Eclipse并安装了1.7 JDK时遇到编译问题: 类文件的版本错误为51.0,应为49.0 因此,由于这看起来像javac版本控制问题,因此我删除了所有Java版本。安装了1.7_51,安装了Apple提供的1.6版本,以便运行Eclipse,更改了符号链接,因此默认值为1.7。与以前相同的问题,同一项目无法编译,尽管其他项目可以编译, 下一步,将问题分