记录一些PHP7RCC1编译问题
1,php7rc1源码编译undefined symboles的问题
自己计划将php7环境部署到cubieboard上,懒得去找别人预编译的版本,所以动手从源码编译,中间遇到了一个小问题,此处记录一下。
PHP的build系统是类似于automake,一般简单执行configure/make/make install就可以编译安装了,但我是需要进行交叉编译的,需要额外指定工具链和目标环境参数,具体如下
./configure \
--prefix=/usr/local/php7 \
--host=arm-linux \
CC=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc \
CPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc -E' \
CXX=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ \
CXXCPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ -E' \
--disable-all \
--enable-fpm
之后make过程中出错,报告phpdbg_prompt.o有DL_LOAD/DL_FETCH_SYMBOL/DL_UNLOAD等的undefined symboles。
从名字上看很自然就知道,这是没找到动态库加载的相关函数,对源码进行一番grep之后,发现上面这几个实际上是一些动态库加载函数抽象宏,在zend_portability.h文件中进行定义的,具体是在128到163行之间,由HAVE_LIBDL宏进行开关控制。再对HAVE_LIBDL进行一番grep之后,发现没有具体定义的地方,于是自然想到手工进行添加。
简单浏览了一下Makefile,发现还挺好修改的,最后在CFLAGS_CLEAN中额外加上-DHAVE_LIBDL=1,并且在EXTRA_LIBS加上-ldl之后,clean之再重新make,问题解决。
2,模块单独编译
用过PHP的人都知道,PHP的模块是支持动态加载的,并且也支持单独编译的。在PHP手册里已有描述具体的编译方法,如下
$/path/to/phpize
$./configure --with-php-config=/path/to/php-config
$make && make install
由于是交叉编译,同样需要额外制定工具链和build目标环境参数,如下
/usr/local/php7/bin/phpize ./configure \
--with-php-config=/usr/local/php7/bin/php-config \
--host=arm-linux \
CC=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc \
CPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc -E' \
CXX=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ \
CXXCPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ -E'
说明一下/usr/local/php7是上面php编译安装的目的路径,执行make install之后,生成的二进制环境和开发build环境一起被安装。在单独编译模块时,需要先编译安装php自身。
~~ end ~~
记录一些PHP7RCC1编译问题的更多相关文章
- CEF3.2623使用记录:windows编译
CEF3.2623使用记录:windows编译 1:cef3.2623下载地址 2623是cef3最后一个支持xp系统的版本,且可以支持html的audio标签,可以用作对html音频的处理下载地址为 ...
- 记录下MoKee编译过程
纯属记录帖 关注和了解这个rom有段时间了. 最近有需要了解odex,折腾了几天还是在坑里. 索性,先编译下MoKee看看. 之前make过 4.2 和 5.1 ,刷到模拟器和N5里. 编译教程可以参 ...
- CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC
本文章主要是记录,cuda 编程过程中遇到的相关概念,名字解释和问题:主要是是用来备忘: cuda PTX :并行线程执行(Parallel Thread eXecution,PTX)代码是编译后的G ...
- grpc使用记录(一) gRPC编译(mscv/gcc)
目录 1.编译前的准备工作 2.Windows下使用VS2019编译 2.1.使用cmake生成VS2019解决方案 2.2.使用msbuild工具进行编译 3.linux下编译 3.1 CentO ...
- 【问题记录】—.NetCore 编译问题
最近在协助验证Jenkins自动编译发布时,对一些.Net Core编译问题进行了解决:特记录一下 一.编译生成netcoreapp目录问题 问题现象 .net core项目编译输出目录总是包含在[n ...
- Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)
#spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...
- 记录windows下编译chromium,备忘
编译windows下chromium,时间:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/wi ...
- openWRT自学---对官方的开发指导文档的解读和理解 记录1:编译一个package
针对的是:http://kamikaze.openwrt.org/docs/openwrt.html#x1-390002 1.If you want, you can also modify the ...
- 记录魅族m1note编译TWRP recovery 3.1.0-0,包括mtk机型的处理方法
1.安装64位linux系统,我用的是deepin os 15.3 2.将系统升级到最新版本 sudo apt-get update && sudo apt-get upgrade 3 ...
随机推荐
- Java集合类学习笔记(Map集合)
Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...
- 高性能javascript(记录三)
DOM(文档对象模型)是一个独立的语言,用于操作XML和HTML文档的程序接口(API).在游览器中,主要用来与HTML文档打交道,同样也用在Web程序中获取XML文档,并使用DOM API用来访问文 ...
- nginx 模块讲解
1. 通用配置选项: --prefix=<path> 指定Nginx的安装路径,所有其他的路径都要依赖于该选项 --sbin-path=<path> ...
- 在 Xcode 7 中安装 Alcatraz
http://www.jianshu.com/p/5c8ed25ad434 安装Xcode7后,继续采用官方方法安装Alcatraz,发现不成功.单独安装XVim也不成功.看了一下Alcatraz的i ...
- 【转载】桥接Microsoft Word和浏览器
原文链接地址: http://www.infoq.com/cn/articles/convert-microsoft-word-to-html?utm_campaign=rightbar_v2& ...
- spring -java.lang.NoClassDefFoundError: javax/mail/MessagingException
今天遇到这个问题,网上找了半天,终于解决了,最后记录一下. spring集成了mail,于是就测试了下,结果报了java.lang.NoClassDefFoundError: javax/mail/M ...
- 为Informix数据库开启事务
1.首先在Informix数据库安装根目录的etc文件夹下找到名为ONCONFIG.on_xxxx的配置文件: 2.打开ONCONFIG.on_xxxx文件,在第409行的位置找到TAPEDEV \\ ...
- DLL 导出封装类
首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL.由于该类会被工程之外的文件所引用,所以需要对这个类进行引出.因为只有引出后 ...
- Android深度探索(卷1)HAL与驱动开发
第一章 介绍Android驱动开发和移植技术 主要对android和linux做了总体的介绍,让我们有了个感性的认识. 一.Android的四层系统架构: a) Linux内核:Android是基于L ...
- 关于启动ubuntu中的nfs启动问题
嵌入式开发,如果使用nfs挂载来启动内核和文件系统,这样便于调试文件系统和驱动,则首先要保证ubuntu开启nfs服务, 执行以下命令安装nfs服务,安装后自动运行 sudo apt-get inst ...