【问题标题】:php fails loading xcache.so after recompile重新编译后php无法加载xcache.so
【发布时间】:2015-05-05 16:12:34
【问题描述】:

我在我的 raspbian 上重新编译了 PHP 5.4.39 以包括对 pthreads 的支持。
一切都很好,即使是 pthreads,但每次我从命令行运行 php 脚本(我猜如果 apache 使用 php 也是一样的),它说加载 xcache.so 失败:

加载 /usr/lib/php5/20100525+lfs/xcache.so 失败:/usr/lib/php5/20100525+lfs/xcache.so:未定义符号:compiler_globals

我用这个信息重新编译了php:https://www.digitalocean.com/community/questions/enable-zts-support-on-ubuntu-14-04

虽然 php 运行良好,但我想知道这条消息是什么意思,如果可能的话我想解决它。

【问题讨论】:

  • 你已经编译了一个不包含compiler_globals 的库。例如您可能已经从自己的重新编译中获得了原始库和新库的混搭。
  • 我如何追踪并解决这个问题。遗憾的是我不知道...
  • 您的扩展来自哪里(包管理器或从源代码编译或其他)?
  • 源是使用apt-get source php5 下载的,如我在原始帖子中发布的教程链接中所述。
  • 有没有看到下面的问题(尤其是答案):stackoverflow.com/questions/22201013/…

标签: php


【解决方案1】:

您很可能启用了针对 PHP 本身的旧版本构建的 PHP 扩展。正确的解决方案是删除错误链接的 PHP 扩展并重建它们。

我建议你从 XCache 扩展(Ubuntu 上的php5-xcache 包)开始。按照您提到的教程中的步骤删除并重建它(只需将php5替换为php5-xcache)。

很可能其他一些扩展也会有问题。删除并重建它们。

如果您只按照教程使用 php5 本身,可以肯定地说您需要删除并重建 所有 扩展。以上就是以php5-开头的所有包。

PS:并非所有 PHP 扩展都支持线程安全。如果您无法构建某个扩展,但无论如何也不需要它,只需将其卸载即可。

PPS:XCache 是一个操作码缓存。确保不要同时启用多个操作码缓存。例如,不要同时启用 XCache 和 OPcache(或 APC),而是选择其中之一。

【讨论】:

  • 感谢您的见解。由于在我的树莓上运行的网站不会经常被访问,我想我不需要操作码缓存。我现在卸载了xcache,消息消失了。如果网站行为明显变慢,我仍然可以重新安装 xcache 的线程安全编译版本(我会按照您的建议进行操作:执行教程并将 php5 替换为 php-xcache)。
  • 顺便说一句:我猜 xcache 无论如何都没有运行,对吗? ^^
  • 这个错误可以归结为“加载XCache失败”,所以你是对的,XCache没有被使用:)
【解决方案2】:

php.ini 中搜索zend_extension,在另一个终端中执行sudo updatedb,然后找到xcache.so,这就是您应该输入php.ini 的路径。如果这不能解决它,您可能正在使用不兼容的 xcache 模块。即使用线程安全的 xcache 和非线程安全的 php,反之亦然。

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2015-02-18
    • 2019-01-27
    相关资源
    最近更新 更多