PHP扩展与C ++?PHP扩展与C ++?(Extending PHP with C++?)

2019-06-02 13:02发布

我有一个PHP编写的性能密集型程序,我想移植到C ++的性能提升。 有什么办法编写使用C ++和界面进行自PHP一个插件或扩展还是什么? 无需手动编辑实际的PHP源?

Answer 1:

我用C ++写一个PHP插件的帮助下痛饮 。 这是可行的,但它可能需要一段时间才能习惯的SWIG编译周期。 你可以用开始SWIG文档的PHP 。

更新
正如@therefromhere已经提到的,我非常建议你买到书扩展和嵌入PHP 。 几乎没有文档在网上找到(至少有在2008年底,2009年初,当我做我的PHP的插件是不是)。 我不得不依靠这本书的一切。 虽然有时谷歌代码搜索是寻找示例代码很有帮助。



Answer 2:

由于莱姆斯说 ,你可以用C / C ++使用Zend API扩展PHP。 通过链接的教程萨拉Golemon是一个良好的开端,这本书扩展和嵌入PHP由同一作者涵盖了更详细的主题。

不过,值得注意的是,这两个(和几乎一切我在网上找到的)焦点定位在C并不能真正覆盖你需要得到C ++的扩展工作的一些调整。

config.m4的文件,你需要明确地链接到C ++标准库:

PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)

任何C ++库编译检查中config.m4文件还需要链接C ++ lib目录下:

PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
  AC_MSG_ERROR([lib $LIBNAME not found.])
],[
  -lstdc++ -ldl
])

编辑 - 这里是如何确定G ++:

最后,而不是最少,以选择C ++而不是建设的延长,6个参数来当C编译器/连接PHP_NEW_EXTENSION()应该是"yes" 。 即:

PHP_NEW_EXTENSION(your_extension,
                  your_extension.cpp, 
                  $ext_shared, 
                  ,
                  "-Wall -Werror -Wno-error=write-strings -Wno-sign-compare",
                  "yes")

从PHP构建系统手册 ,参数是:

  1. 扩展的名称
  2. 所有的源文件,这是扩展的一部分名单。
  3. (可选) $ext_shared ,其通过配置来确定当PHP_ARG_WITH()被调用一个值
  4. (可选)“SAPI类”,仅对于需要的CGI或CLI SAPIs具体扩展有用的。 它应该在所有其他情况下是空的。
  5. (可选)标志的列表,以在构建扩展被添加到CFLAGS。
  6. (可选)一个布尔值,如果“是”,将迫使整个扩展使用$ CXX代替$ CC来构建。

我不能工作了如何获得配置脚本来设置G ++的编译器/连接器,而不是GCC,所以结束了黑客的Makefile用sed命令做在我的bash构建脚本搜索替换:

phpize
./configure --with-myextension
if [ "$?" == 0 ]; then
# Ugly hack to force use of g++ instead of gcc
# (otherwise we'll get linking errors at runtime)
   sed -i 's/gcc/g++/g' Makefile
   make clean
   make
fi

大概有一个automake的命令,这将使这个技巧是不必要的。



Answer 3:

PHP本身松散的联系库的集合。 见http://devzone.zend.com/article/1021的教程如何编写你自己的。



文章来源: Extending PHP with C++?