我在8-10年前在windows下构建了许多自定义PHP扩展。几年前我向Ubuntu Linux转移了我的所有网络内容,发现我需要创建另一个自定义扩展。我这次将在Ubuntu下进行开发。
我创建了一个非常简单的扩展(实际上是无操作),只是为了确保我的构建过程正常运行。不是。
这就是我所做的:
因此。让我困惑的颜色。根据我所读到的,phpize命令应该与扩展构建设置匹配到php构建设置 我显然错过了某处基本的东西。
非常感谢帮助。
答案 0 :(得分:1)
很难说究竟出了什么问题,我只能说扩展是使用与php版本不同的配置构建的。
我将描述一些可重现的步骤,如何使用PHP源文件夹中的调试符号编译最基本的扩展。除ext_skel
创建的一些样板代码外,扩展不包含任何代码。它只描述了UNIX上的编译过程。它是一个shell脚本,您可以执行它。
#!/bin/sh
# Should work for all PHP5 versions
VERSION="5.6.9"
# Download the PHP source code
wget \
--continue "http://de2.php.net/get/php-$VERSION.tar.gz/from/this/mirror" \
-O "php-$VERSION".tar.gz
tar xf "php-$VERSION.tar.gz" && cd "php-$VERSION/ext"
# Create a hello extension from skeletons
./ext_skel --extname="hello"
# Uncomment two lines in ext/hello/config.m4
# Read the comments there and you'll know what I'm doing
sed -ri.original \
-e 's/(dnl )(PHP_ARG_ENABLE\(hello)/\2/' \
-e 's/(dnl )(\[ --enable-hello)/\2/' \
hello/config.m4
# Build PHP and the extension
cd ..
./buildconf --force
./configure \
--enable-debug --enable-maintainer-zts \
--enable-hello=shared
make -j
# Test if it is working
sapi/cli/php \
-dextension=modules/hello.so \
-r 'var_dump(extension_loaded("hello"));'
您现在可以开始输入ext/hello/hello.c
的代码并创建您的扩展程序。如果您想编译更改,只需发出make
而不带参数。
由于我们使用--debug
编译,我们现在可以使用gdb
调试C
代码并探索PHP内部的工作方式。要启动调试会话,请使用:
gdb sapi/cli/php
...
(gdb) break main
(gdb) run -dextension=modules/hello.so some.php
当然,在将代码添加到扩展程序后,您通常会将断点设置为扩展函数而不是php main()
函数中的断点。但是,这应该显示到达目的地的基本步骤。
玩得开心! :)
gdb