用C语言编写的PHP扩展链接

3

编辑:修改我的问题

当用C语言构建外部PHP模块时,我该如何链接共享对象?

1个回答

13
如果你的C扩展代码使用了共享库,你需要在config.m4文件中声明。我强烈建议使用PHP源码中包含的ext_skel脚本来生成一个框架config.m4文件: ./ext_skel --extname=myextension 由于你链接到一个库,按照惯例,你应该使用--with-myextension选项(而不是--enable-myextension)。去掉config.m4中相关行的注释并填写你的库的详细信息。
像下面这样:
  # --with-myextension -> check for lib and symbol presence
  LIBNAME=the_lib_your_extension_needs # you may want to change this
  LIBSYMBOL=some_symbol_in_the_lib_you_extension_needs # you most likely want to change this 

  PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  [
    PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $MYEXTENSION_DIR/lib, MYEXTENSION_SHARED_LIBADD)
    AC_DEFINE(HAVE_MYEXTENSIONLIB,1,[ ])
  ],[
    AC_MSG_ERROR([wrong $LIBNAME lib version or lib not found])
  ],[
    -L$MYEXTENSION_DIR/lib -ldl
  ])

然后构建它,运行:
phpize
./configure --with-myextension
make

最后,您需要将模块(或ln -s)复制到系统期望找到它的任何位置。

如果所有操作都成功,则php -m应该包含在列表中。

不幸的是,我从未找到过一个好的关于PHP config.m4命令的在线参考资料——关于这个问题的书籍有Sara Golemon的扩展和嵌入PHP以及George Schlossnagle的高级PHP编程的部分内容。

这里有一个由Sara Goleman提供的合理的创建PHP扩展的初学者指南here,但对于实质性内容,您确实需要她的书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接