使用 phpize 编译共享 PECL 扩展

有时,使用 pecl 安装程序不是一种选择。这可能是因为存在防火墙,或者因为要安装的扩展不可用为 PECL 兼容的软件包,例如来自 git 的未发布扩展。如果需要构建此类扩展,则可以使用底层构建工具手动执行构建。

phpize 命令用于为 PHP 扩展准备构建环境。在以下示例中,扩展的源代码位于名为 extname 的目录中。

$ cd extname
$ phpize
$ ./configure
$ make
# make install

成功安装后将创建 extname.so 并将其放入 PHP 扩展目录 中。需要调整 php.ini 文件,并添加 extension=extname.so 行,然后才能使用该扩展。

如果系统缺少 phpize 命令,并且使用预编译的软件包(如 RPM),请务必同时安装 PHP 软件包的相应开发版本,因为它们通常包含 phpize 命令以及用于构建 PHP 及其扩展的适当头文件。

执行 phpize --help 以显示其他用法信息。

添加注释

用户贡献的注释 5 个注释

Brian
16 年前
如果您安装了多个 PHP 版本,则可以使用配置期间的 --with-php-config 选项来指定要构建哪个安装。

--with-php-config=[在此处插入适当的 php-config 路径]

例如(我的情况)
./configure --with-php-config=/usr/local/php5/bin/php-config5
admin at eexit dot net
12 年前
当为 64 位堆栈(例如)编译扩展,而您的编译器配置为在 32 位模式下编译时,您可以使用 C 标志手动编译扩展,然后再进行配置。

示例:我的系统编译器是 32 位,我的堆栈是 64 位。要编译我的 xdebug

# phpize
# CFLAGS=-m64 CPPFLAGS=-m64 CCASFLAGS=-m64 ./configure --enable-xdebug
# gmake
# file modules/xdebug.so
modules/xdebug.so: ELF 64-bit LSB dynamic lib AMD64 Version 1, dynamically linked, not stripped, no debugging information available
dmytton at php dot net
18 年前
在某些情况下(例如在 cPanel 服务器上),构建的扩展不会被 make install 进程放置到正确的扩展目录中。使用您的 phpinfo() 输出确定正确的 extension_dir 路径,并将生成的 .so 文件移动到该目录中。然后,php.ini 文件中的 extension=extname.so 行将正确找到扩展文件。
Glen
17 年前
当您有多个 PHP 安装时,从特定安装运行 phpize 不会强制该模块使用该安装的包含文件进行编译。

在我的情况下,我安装了标准 PHP 发行版,并正在评估 Zend Core / Zend Platform,它在 /usr/local/Zend/.. 安装路径中安装了自己的 Apache 和 PHP。它缺少 json.so 模块,因此我不得不自己编译。

运行 Zend Core 的 phpize 时,输出表明该模块的配置将发生。但在运行 ./configure 时,使用了标准安装的包含文件。结果是 json.so 使用错误的 PHP 进行编译,当 Zend Core 的 php 初始化时将无法加载。

我唯一能看到的纠正这种情况的方法是暂时更改标准 PHP 包含路径以指向 Zend Core 的包含文件。在我的情况下,我对 /usr/include/php5 做了备份副本,并执行了 "ln -s /usr/local/Zend/Core/include/php/ /usr/include/php5"。
gautama dot himawan at yahoo dot com
9 年前
如果您无法运行 phpize 命令,则应该安装 php-devel 软件包。使用 yum 安装 php-devel 软件包的命令行是:yum install php-devel。

如果您无法编译 PECL 扩展,则应该安装 gcc 软件包。使用 yum 安装 gcc 软件包的命令行是:yum install gcc。
To Top