编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆。

C/C++程序编译有两种方式:动态编译、静态编译。PHP 是使用 C/C++程序开发的一门脚本语言,其扩展编译也就脱离不了前面提到的两种,动态、静态。站在PHP程序的角度,动态编译就是扩展生成一个 .so 文件,然后在 php.ini 中加载这个 .so 文件,此时即可调用其中的函数或者是类方法;静态编译就是在安装 PHP 时把其扩展文件内容编译到 PHP 内部,然后不需要做任何事情,就可以直接调用其中的函数或者还是类方法。这二者有什么优缺点呢?采用静态编译方式,程序在调用其函数/类方法时要快一些;采用动态编译方式,在有新扩展需要添加到PHP中时不需要重新编译PHP,只需要编译该扩展下的文件,然后把 .so 文件引入即可。二者均有利弊,使用时视情况而定是最好的方法。下面用Linux 平台下的操作来说明其编译过程。

第一种,动态编译

1. 在php.net 下载PHP源程序,然后使用其中的扩展骨架生成一个简单的扩展

cd php-5.3.24/ext    #进入到 php 扩展程序目录
./ext_skel --extname=simplecache #生成一个名为simplecache的扩展,也就是在此目录下新增了一个目录 simplecache

2. 修改此扩展配置文件 config.m4

dnl PHP_ARG_ENABLE(simplecache, whether to enable simplecache support,
dnl Make sure that the comment is aligned:
dnl [ --enable-simplecache Enable simplecache support]) 修改为: PHP_ARG_ENABLE(simplecache, whether to enable simplecache support,
dnl Make sure that the comment is aligned:
[ --enable-simplecache Enable simplecache support])

3. 开始编译

/usr/local/php-5.3/bin/phpize
./configure --with-php-config=/usr/local/php-5.3/bin/php-config
make

注:/usr/local/php-5.3/ 是提前使用上面下载到的源程序安装好的PHP目录,里面包含一些可执行文件( php phpize php-config)
此时在 simplecache/modules 目录里就会生成 simplecache.so。

4. 配置
把上一步生成的 simplecache.so 放到 /usr/loca/php-5.3/ext/ 中,在 php.ini 文件引入此文件。

第二种,静态编译

1. 下载php源程序,生成扩展,如上。

2. 修改扩展配置文件 config.m4,如上。

3. 重新生成php程序目录下的 configure 文件

cd php-5.3.24
rm configure
./buildconf --force

4. 重新安装php

./configure --prefix=/usr/local/php --enable-simplecache
make
make install

备注:

1. 创建扩展过程其实可以省去,如果非必须。这里只是顺便记录,让这个编译工程更透明,容易理解。
2. 扩展配置文件 config.m4中的 --enable-extname   / --with-extname 这两项究竟该使用哪中呢?取决于扩展库,通常不需要外部库文件的扩展库使用 --enable 。

来源:python脚本自动迁移

编译PHP扩展的方式的更多相关文章

  1. 用pecl/pear独立编译PHP扩展 vs. 把扩展编译到PHP内核中

    将扩展编译到php内部的方式会提高php运行扩展的效率,但是每次需要新添加扩展时都需要把php以及之前添加的所有扩展重新编译一边,非常麻烦. 独立编译扩展,php外部调用扩展的方式虽然会牺牲一点点的性 ...

  2. PHP7 学习笔记(九)phpsize动态编译openssl扩展 (微信公众平台)

    先吐槽,微信公众平台授权出问题了,尽然访问不了 一.问题描述: 使用PHP中的库函数file_get_contents时出现Unable to find the wrapper "https ...

  3. php安装soap等扩展的方式: 已经安装了php却发现少安装了一下扩展

    php安装soap等扩展的方式: 已经安装了php却发现少安装了一下扩展 1.首先确认下php.ini的安装位置 我的安装目录是: /usr/local/php 一般位置: /usr/local/ph ...

  4. Xamarin.Android编译CPU类型选择方式

    Xamarin.Android编译CPU类型选择方式 在Xamarin.Android编译的时候,默认提供了5种CPU类型供大家选择.它们分别为armeabi.armeabi-v7a.arm64-v8 ...

  5. Memcached 笔记与总结(2)编译 php-memcache 扩展

    环境:CentOS 6.6 + Apache 2.2.21 + PHP 5.3.10 php-memcache 是 php 写的 memcached 的客户端,以扩展的形式发布. 对于正在运行的 ph ...

  6. windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展

    在windows平台上安装python c extension的扩展包是件很痛苦的事情,一般通过安装vc/vs系列来编译C扩展,不过安装包都比较大.或者通过mingw编译,不过有时会在兼容性上出现点问 ...

  7. php编译安装扩展redis及swoole

    一.安装redis扩展 下载redis扩展包以及解压 wget https://github.com/edtechd/phpredis/archive/php7.zip unzip php7.zip ...

  8. 编译静态库的方式使用spdlog和fmt

    前言 spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式. 又因为spdlog还依赖另一个开源库fm ...

  9. php扩展安装方式

    目录 扩展安装 php源码编译安装 PEAR.PECL phpize 源码安装 扩展安装 以php安装swoole扩展为例. php源码编译安装 下载源码包并编译安装 $ wget http://cn ...

随机推荐

  1. 论文翻译:2020_Generative Adversarial Network based Acoustic Echo Cancellation

    论文地址:http://www.interspeech2020.org/uploadfile/pdf/Thu-1-10-5.pdf 基于GAN的回声消除 摘要 生成对抗网络(GANs)已成为语音增强( ...

  2. Java Record 的一些思考 - 序列化相关

    Java Record 序列化相关 Record 在设计之初,就是为了找寻一种纯表示数据的类型载体.Java 的 class 现在经过不断的迭代做功能加法,用法已经非常复杂,各种语法糖,各种多态构造器 ...

  3. Android 摄像头预览悬浮窗

    用CameraX打开摄像头预览,显示在界面上.结合悬浮窗的功能.实现一个可拖动悬浮窗,实时预览摄像头的例子. 这个例子放进了单独的模块里.使用时注意gradle里的细微差别. 操作摄像头,打开预览.这 ...

  4. 机器学习术语表——Beta

    机器学习术语表 Beta 提示:你可以通过中文名称拼音首字母快速检索. C 超参数|Hyperparameter 在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据.通 ...

  5. 安装TestNG

    1.启动Eclipse,选择"Help"-->'Install New Software' 2.在谈出的弹框中选择"Add" 3.在弹出的"Ad ...

  6. vps上安装CobaltStrike服务端

    今天我在我的vps上安装CobaltStrike服务端,真的是踩坑无数,所以写这篇博客记录一下,防止后人再踩坑 安装Oracle JDK8 官方不建议使用OpenJdk,建议使用Oracle JDK的 ...

  7. Zabbix漏洞利用 CVE-2016-10134

    最近也是遇见了Zabbix,所以这里以CVE-2016-10134为例复现一下该漏洞 什么是Zabbix? zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. ...

  8. 大型站点TCP/IP协议优化

    作为一个DAU上百万或千万的站点,不仅仅需要做好网站应用程序.数据库的优化,还应从TCP/IP协议层去进行相关的优化: 在我的工作中,曾使用到了以下的几种基本的优化方式: 增大最大连接数 在Linux ...

  9. Android官方文档翻译 九 2.2Adding Action Buttons

    Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...

  10. 【reverse】逆向6 JCC

    [reverse]逆向6 JCC 前言 我们之前学习的时候讲了,eip寄存器存储的是当前(即将执行的语句的) 指向地址 而我们之前提到的下断点(F2),就和我们编程中的下断点一样,执行到某句汇编指令然 ...