无法让 PHP 加载 mongo.so 扩展

Posted

技术标签:

【中文标题】无法让 PHP 加载 mongo.so 扩展【英文标题】:Can't get PHP to load mongo.so extension 【发布时间】: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。有什么想法吗?

【问题讨论】:

【参考方案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 是行不通的。

以上是关于无法让 PHP 加载 mongo.so 扩展的主要内容,如果未能解决你的问题,请参考以下文章

需要使用 MongoDB.so 扩展的 Symfony 2 MongoDB 包

需要使用 MongoDB.so 扩展的 Symfony 2 MongoDB 包

PHP无法加载curl扩展

PHP 无法加载 php_curl.dll 扩展

PHP ZMQ 扩展:无法加载动态库

PHP中Redis扩展无法加载问题