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

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. CS5216|DP1.2转HDMI1.4音视频转换芯片|CS5216参数

    Capstone CS5216是一款用于DP1.2转HDMI1.4音视频转换芯片.CS5216是HDMI 电平移位器/中继器专为2型双模Display Port(DP++)电缆适配器应用而设计.它设计 ...

  2. react中create-react-app详情配置文档

    https://facebook.github.io/create-react-app/docs/documentation-intro

  3. vue注册全局组件

    在项目开发中能不能自己写一个组件可以像iview或者element那样可以不必引用就可以直接用呢?答案是可以的. 首先,写一个组件mainHeader. 接着在vue中注册这个组件,代码如下: Vue ...

  4. StringBuffer和String的区别

    面试题:String为什么不可变 StringBuffer和StringBuilder的区别 String 和StringBuffer的区别: (一):String 类中的byte数组使用final修 ...

  5. 【Java】IntelliJ IDEA 快捷键

    IntelliJ IDEA 快捷键 1. Editing(编辑) 快捷键 介绍 Ctrl +Space 基本代码补全,输入字母按后列出匹配的词组 Ctrl+Shift+Space 智能代码补全,列出与 ...

  6. 都2022年了,你的前端工具集应该有vueuse

    摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...

  7. 与Elasticsearch交互的客户端

    1.访问ES的方式 访问es的方式有两种,一种是http方式,还有一种是java客户端方式. 其中Java客户端又分为:1.1.Node client: 节点客户端实际上是一个集群中的节点(但不保存数 ...

  8. Qt之QFontDialog

    widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { ...

  9. gin框架中多种数据格式返回请求结果

    返回四种格式的数据:1. []byte.string  2. json格式  3. html模板渲染  4. 静态资源设置 package main import ( "github.com ...

  10. yum源 epel源 no package available 更换国内yum源

    有时候安装软件会出现 no package available 解决办法:yum install epel-release 安装完会在/etc/yum.repos.d/目录下下生成两个repo文件: ...