无法让 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 包