PHP7 学习笔记如何使用zephir编译一个扩展记录

Posted Tinywan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP7 学习笔记如何使用zephir编译一个扩展记录相关的知识,希望对你有一定的参考价值。

 一、zephir 编译遇到的错误

安装

git clone https://github.com/phalcon/zephir
$ cd zephir
$ ./install-json
$ ./install -c

编译

www@ubuntu4:~$ zephir build

────────────────────────────────────────────────────────────
  The Zephir Parser extension is not loaded.
  Note: Zephir no longer distributed with internal parser.
  
  To install latest stable Zephir Parser please refer to:
  https://github.com/phalcon/php-zephir-parser
────────────────────────────────────────────────────────────

二、php-zephir-parser 安装

git clone git://github.com/phalcon/php-zephir-parser.git

php7.0-dev 安装报错

www@ubuntu4:~$ sudo apt-get install php7.0-dev gcc make re2c autoconf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package php7.0-dev
E: Couldn\'t find any package by regex \'php7.0-dev\'

如何让解决

1、php7的存储库的问题,添加php7 ppa

sudo add-apt-repository ppa:ondrej/php

2、更新库

sudo apt-get update

3、现在做一个搜索来确认php7是有的

sudo apt search php7

重新安装,则不会报错

www@ubuntu4:~$ sudo apt-get install php7.0-dev gcc make re2c autoconf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
gcc is already the newest version.
gcc set to manually installed.
make is already the newest version.
re2c is already the newest version.
The following extra packages will be installed:
  automake autotools-dev debhelper dh-apparmor dh-php gettext intltool-debian
  libasprintf-dev libgettextpo-dev libgettextpo0 liblist-moreutils-perl
  libltdl-dev libmail-sendmail-perl libssl1.1 libsys-hostname-long-perl
  libtool libunistring0 m4 php-common php-pear php-xml php7.0-cli
  php7.0-common php7.0-json php7.0-opcache php7.0-readline php7.1-common
  php7.1-xml pkg-php-tools po-debconf shtool xml2

开始编译

www@ubuntu4:~/ffmpeg_videos/php-zephir-parser$ sudo ./install
Generating parser...
Parser statistics: 132 terminals, 99 nonterminals, 470 rules
                   982 states, 0 parser table entries, 0 conflicts
Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
libtool: compile:  gcc -I. -I/home/www/ffmpeg_videos/php-zephir-parser -DPHP_ATOM_INC -I/home/www/ffmpeg_videos/php-zephir-parser/include
-I/home/www/ffmpeg_videos/php-zephir-parser/main -I/home/www/ffmpeg_videos/php-zephir-parser -I/usr/include/php/20151012

-I/usr/include/php/20151012/main -I/usr/include/php/20151012/TSRM -I/usr/include/php/20151012/Zend -I/usr/include/php/20151012/ext

-I/usr/include/php/20151012/ext/date/lib -DHAVE_CONFIG_H -march=native -mtune=native -O2 -fomit-frame-pointer -fvisibility=hidden -flto
-c /home/www/ffmpeg_videos/php-zephir-parser/zephir_parser.c -fPIC -DPIC -o .libs/zephir_parser.o

或者指定编译配置文件

$./install --phpize /usr/local/php-7.1.11/bin/phpize --php-config /usr/local/php-7.1.11/bin/php-config

....

  

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don\'t forget to run \'make test\'.

Installing shared extensions: /usr/local/php-7.1.11/lib/php/extensions/no-debug-non-zts-20160303/
Cleaning..

Thanks for compiling Zephir Parser!
Build succeed: Please restart your web server to complete the installation

编译完成

查找.so 文件路径

www@ubuntu4:~ sudo find / -name zephir_parser.so
/usr/lib/php/20151012/zephir_parser.so

配置php.ini 文件

sudo vim /opt/php-7.1.9/etc/php.ini

添加一下内容:

[Zephir Parser]
extension=/usr/lib/php/20151012/zephir_parser.so

安装完毕

三、重新编译,出现同样的错误:

www@ubuntu4:~/ffmpeg_videos/zephir-framework/lib$ zephir build

────────────────────────────────────────────────────────────
  The Zephir Parser extension is not loaded.
  Note: Zephir no longer distributed with internal parser.
  
  To install latest stable Zephir Parser please refer to:
  https://github.com/phalcon/php-zephir-parser
────────────────────────────────────────────────────────────

好纠结啊,如何解决:

直接系统自动默认安装的

rm /usr/bin/php

做个软连接

sudo ln -s /opt/php-7.0.9/bin/php /usr/bin/php

继续,Ok 了:

www@ubuntu4:~/ffmpeg_videos/zephir-framework/zephirlib$ zephir build
Compiling...
Installing...
Extension installed!
Add extension=zephirlib.so to your php.ini

 

编译PHP7 如何使用 Cli 命令而不是软连接

 

  • root用户,sudo vim /etc/profile

  • 添加PHP7编译的路径:export PATH=$PATH:/usr/local/php-7.1.8/bin,执行source profile使生效

 

以上是关于PHP7 学习笔记如何使用zephir编译一个扩展记录的主要内容,如果未能解决你的问题,请参考以下文章

PHP 扩展开发之Zephir

沈逸老师ubuntu速学笔记-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展

zephir开发的扩展“wudimei框架”之模板词法扫描完成代码切分

如何在 PHP7.4 中使用 inotify

Zephir

编译PHP7扩展(以memcached为例)