mar*_*hon 4 php c autoconf makefile php-extension
我正在尝试编写 PHP 的 C 扩展。这是我的config.m4。几乎直接从 helloworld 中出来
PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
[ --enable-my-ext Enable My Ext support])
if test "$PHP_MY_EXT" = "yes"; then
AC_DEFINE(HAVE_MY_EXT, 1, [Whether you have my ext])
PHP_NEW_EXTENSION(my_ext, my_ext.c, $ext_shared)
fi
Run Code Online (Sandbox Code Playgroud)
当我运行 phpize 和 ./configure 时,它会生成一个可以工作的 Makefile。 到目前为止看起来不错。
现在,如果我向 PHP_NEW_EXTENSION 添加额外的源文件,事情就会崩溃。根据此处和此处,调用应如下所示:
PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)
Run Code Online (Sandbox Code Playgroud)
完整语法:
PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])
Run Code Online (Sandbox Code Playgroud)
好的,所以我将额外的源文件 (logging.c) 添加到该列表中:
PHP_NEW_EXTENSION(my_ext, my_ext.c, logging.c $ext_shared)
Run Code Online (Sandbox Code Playgroud)
和 phpize/configure生成一个成功运行的 Makefile,但实际上并没有构建任何东西。 (是的,我已经做了 make distclean、phpize --clean 等)
我比较了成功的 Makefile 和损坏的 Makefile,以下是差异:
$ diff Makefile Makefile.broken
14d13
< shared_objects_my_ext = my_ext.lo
16c15
< PHP_MODULES = $(phplibdir)/my_ext.la
---
> PHP_MODULES =
170,175d168
< $(phplibdir)/my_ext.la: ./my_ext.la
< $(LIBTOOL) --mode=install cp ./my_ext.la $(phplibdir)
<
< ./my_ext.la: $(shared_objects_my_ext) $(MY_EXT_SHARED_DEPENDENCIES)
< $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_my_ext) $(MY_EXT_SHARED_LIBADD)
<
Run Code Online (Sandbox Code Playgroud)
有人知道这是怎么回事吗?
顺便说一句,如果我省略了额外的源文件,我会收到有关该文件中具有“内部链接但未定义”的函数的编译器警告。
尝试移动第二个逗号
PHP_NEW_EXTENSION(my_ext, my_ext.c, logging.c $ext_shared)
到
PHP_NEW_EXTENSION(my_ext, my_ext.c logging.c, $ext_shared)
如果我正确理解文档,第二个参数应该是空格分隔的源列表。
归档时间: |
|
查看次数: |
986 次 |
最近记录: |