我在8-10年前在windows下构建了许多自定义PHP扩展。几年前,我开始使用Ubuntu来处理我所有的网页内容,我发现我需要创建另一个自定义扩展。这次我将在Ubuntu下进行开发。
我创建了一个非常简单的扩展(实际上是一个没有操作的扩展),只是为了确保构建过程正常工作。事实并非如此。
以下是我所做的:
所以。给我涂上迷糊。根据我所读到的,phpize命令应该将扩展构建设置与php构建设置匹配。
我显然错过了一些最基本的东西。
我们将非常感谢你的帮助。
发布于 2015-06-06 00:29:20
很难说到底出了什么问题,我只能说扩展是使用与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代码,并探索C内部的工作方式。要启动调试会话,请使用:
gdb sapi/cli/php
...
(gdb) break main
(gdb) run -dextension=modules/hello.so some.php当然,一旦向扩展添加了代码,大多数情况下都会在扩展函数中设置断点,而不是在php main()函数中设置断点。然而,这应该说明了实现这一目标的基本步骤。
玩得开心!:)
gdbhttps://stackoverflow.com/questions/30677570
复制相似问题