【问题标题】:Can't get PHP to load mongo.so extension无法让 PHP 加载 mongo.so 扩展
【发布时间】:2011-04-25 14:49:56
【问题描述】:

我尝试使用 PECL 构建库,我尝试从 github 下载它。我试过 MAMP,我试过 XAMPP。我总是遇到同样的错误:

PHP 警告:PHP 启动:无法加载动态库 '/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/mongo.so' - dlopen (/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/mongo.so, 9):找不到合适的图像。确实找到了:\n\t/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/mongo.so:在第 0 行的未知中需要未知的加载命令 0x80000022

(路径因 XAMPP 或 MAMP 而异)

我正在运行 OS 10.5.8。有什么想法吗?

【问题讨论】:

    标签: php macos mongodb xampp


    【解决方案1】:

    我可以告诉你这是一个与架构相关的问题(例如,请参阅this)。根据this question on their FAQ,XAMPP 仍然是 32 位的,PECL 默认会尝试将扩展构建为 64 位。

    但是,从 2.01 开始,MAMP 和 MAMP Pro 都提供 32 位和 64 位二进制文​​件。

    但是,问题是您的 Mac 是否具有 64 位处理器,以及它是否默认运行 64 位 OS X。 This Apple support article 提供有关如何确定您拥有的 Mac 的指南。例如,如果您有一台 2008-2010 年的 Macbook Pro,它可能默认运行 32 位内核,但(请参阅文章)您可以将其设置为运行 64 位内核。

    不过,您实现目标的最快途径可能是为 32 位构建 mongo.so。 using MAMP/PECL to install PHP extensions 上的这篇文章说,使用 PECL 应该像这样简单:

    CFLAGS="-arch i386" ./pecl install
    

    如果这不起作用,您可以尝试手动安装,传递 32 位标志进行配置。请参阅this question for memcached.so installation 了解可能对您有用的方法。

    这应该可以工作(基于上述和manual installation instructions for the Mongo driver on php.net):

    tar zxvf mongodb-mongodb-php-driver-<commit_id>.tar.gz
    cd mongodb-mongodb-php-driver-<commit_id>
    phpize
    MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" ./configure
    sudo make install
    

    ...然后参考上面的 php.net 链接了解其余的手动安装步骤(即在 php.ini 中添加扩展名)。

    【讨论】:

    • 内核的位数根本不会影响 Mac OS X 上的用户空间。您可以在 32 位内核上运行 64 位应用程序,反之亦然。
    • @duskwuff 你说的是对的。然而,你不能做的是使用带有 64 位扩展的 32 位 MAMP。您可以使用 32 位 mongo.so 运行 32 位 MAMP,但使用 64 位 mongo.so 是行不通的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2013-02-10
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多