• 记录一些PHP7RCC1编译问题


    1,php7rc1源码编译undefined symboles的问题

    自己计划将php7环境部署到cubieboard上,懒得去找别人预编译的版本,所以动手从源码编译,中间遇到了一个小问题,此处记录一下。

    PHP的build系统是类似于automake,一般简单执行configure/make/make install就可以编译安装了,但我是需要进行交叉编译的,需要额外指定工具链和目标环境参数,具体如下

    1 ./configure 
    2     --prefix=/usr/local/php7 
    3     --host=arm-linux 
    4     CC=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc 
    5     CPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-gcc -E' 
    6     CXX=/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ 
    7     CXXCPP='/home/debian/local/arm-sunxiA20-linux-gnueabi/bin/arm-sunxiA20-linux-gnueabi-g++ -E' 
    8     --disable-all 
    9     --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手册里已有描述具体的编译方法,如下

    1 $/path/to/phpize
    2 $./configure --with-php-config=/path/to/php-config
    3 $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 ~~

  • 相关阅读:
    强制数据类型转换之Number类型
    强制类型转换之String类型
    数据类型之字符串类型与Number类型
    favicon.ico是什么?
    什么是自幂数?
    JavaScript基础之变量的自增与自减
    CMD 命令
    那些看完很有同感的语句
    HTML5 canvas 元素
    HTML的多媒体属性
  • 原文地址:https://www.cnblogs.com/lanyuliuyun/p/4769452.html
Copyright © 2020-2023  润新知