交叉编译php8.2.5+phpRedis5.3.7插件到ArmV7

        由于ARM板使用的是ArmV7,所以使用ubuntu14.04来完成本次的编译。

        php8.2.5截止到2023年5月是最新的版本,一些环境在ubuntu14.04上需要手动更新。

 一、编译libxml2-v2.11.1

        在Linux中,所有默认的库都与该系统的初代发布版本一致,所以在ubuntu14.04中使用apt install安装的库版本都很老。

        编译php8.2.5依赖libxml2,下载libxml2-v2.11.1,尝试执行./autogen.sh,后执行./configure 失败,需要安装以下:

1、依赖automake 高版本 1.16.3

        下载automake 1.16.3源码并编译

# ./configure 
# make
# make install

 查看已安装版本号 automake --version

2、安装python2.7-dev

# apt-get install python2.7-dev

3、添加pkg.m4环境变量

# find / -name "pkg.m4"
# export ACLOCAL_PATH=/usr/share/aclocal

4、添加libsqlite3

# find / -name libsqlite3.so
# export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

5、交叉编译libxml2

# ./autogen.sh
# ./configure --prefix=/home/zfadmin/xml2_v211/arm --without-python --without-zlib --host=arm-linux-gnueabihf
# make
# make install

二、编译Apache 2.4.57

1、编译pcre2-10.37源码并安装

./configure --prefix=/home/zfadmin/httpdCompile/pcre2_arm --host=arm-linux-gnueabihf

2、下载apr和apr-ultra

       放到srclib目录下,注意拷贝过去不能带版本号。

        遇到run test的编译错误就把configure目录下的run test段落注释掉就行,一共有3处

3、编译安装 expat-2.5.0

./configure --prefix=/home/zfadmin/httpdCompile/expatArm --host=aarch64-linux-gnu

4、编译openssl 1.1.1

./Configure --prefix=/home/zfadmin/httpdCompile/opensslArm/ linux-elf no-shared shared no-zlib no-asm no-threads no-sse2 no-rfc3779 no-rc5 no-zlib-dynamic no-hw no-md2 no-mdc2 no-rc2 no-idea no-camellia no-ec no-ripemd no-bf no-cast --cross-compile-prefix=arm-linux-gnueabihf-

5、安装Apache

--enable-so 选项可以使接下来编译php8可指定apxs目录,如不用php可不加
如果php8没有编译成线程安全的版本则需要--with-mpm=prefork --enable-mpms-shared=all

# CFLAGS="-pthread" CXXFLAGS="-pthread" ./configure --with-expat=/home/zfadmin/httpdCompile/expatArm --with-mpm=prefork --enable-mpms-shared=all --enable-so --with-ssl=/home/zfadmin/httpdCompile/opensslArm --prefix=/home/zfadmin/httpdCompile/arm CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf --with-pcre=/home/zfadmin/httpdCompile/pcre2_arm/bin/pcre2-config --with-included-apr ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes ap_cv_void_ptr_lt_long=no ac_cv_struct_rlimit=yes

提示gen_test_char:
    进入到/home/zfadmin/httpdCompile/httpd-2.4.57/server 目录
    执行gcc -Wall -O2 -DCROSS_COMPILE gen_test_char.c -s -o gen_test_char
    再执行./gen_test_char > test_char.h
    然后继续make 

出现AH00534: httpd: Configuration error: More than one MPM loaded 
    在httpd.conf中加上Include conf/extra/httpd-mpm.conf。httpd.conf中不加任何mpm模块
    在httpd-mpm.conf 中只保留关于 mpm_prefork_module的一小段,其余全部注释

三、编译PHP8.2.5

1、编译zlib1.2.13

export CC=aarch64-linux-gnu-gcc
export AR=aarch64-linux-gnu-ar
export RANLIB=aarch64-linux-gnu-ranlib
./configure --prefix=/home/zfadmin/php825/zlib/arm

2、编译php

        先编译apache,才能再编译php8,因为php8在编译的时候需要指定--with-apxs2=/home/zfadmin/httpdCompile/arm/bin/apxs的目录才行,注意要么把php8编译成线程安全的,要么编译出来一个单线程的apache。本文选择编译一个单线程的apache。

需要在命令行中设置LDFLAGS 变量:  

export CPPFLAGS="-I/home/zfadmin/php825/zlib/arm3/include -I/home/zfadmin/php825/sqllit3/arm/include"
export LDFLAGS="-L/home/zfadmin/xml2_v211/arm/lib -L/home/zfadmin/php825/zlib/arm3/lib -L/home/zfadmin/php825/sqllit3/arm/lib"

多次配置请记得 make clean;make disclean;以防出现意外情况

# ./configure --prefix=/home/zfadmin/php825/arm4 --with-apxs2=/home/zfadmin/httpdCompile/arm3/bin/apxs --host=arm-linux-gnueabihf  --enable-session --with-libxml=/home/zfadmin/xml2_v211/arm  --with-mysqli  --without-sqlite3 --with-zlib=/home/zfadmin/php825/zlib/arm3 --disable-phar --without-pear
# make 
# make install

选项说明:   

        1、必需要加 --enable-session,不然没有办法调用redis。

        2、 需要指定--with-apxs2=/home/zfadmin/httpdCompile/arm/bin/apxs的目录,会在apache编译后目录下的moduls下生成一个libphp.so,这个libphp.so与生成的php可执行程序无关。

        3、需要手动指定--without-sqlite3。

        4、需要指定--disable-phar --without-pear。

        5、显示指定--with-mysqli,即便后续还需要手动编译mysqli.so。

四、编译phpRedis5.3.7

        进入到phpRedis扩展的源码目录,先运行刚刚编译的phpize,再执行configure。会在编译好的php扩展目录下生成对应的so文件。

# /home/zfadmin/php825/arm/bin/phpize
# CC=arm-linux-gnueabihf-gcc ./configure --with-php-config=/home/zfadmin/php825/arm/bin/php-config --host=arm-linux-gnueabihf --enable-redis

五、编译mysqli

进入php源码目录中的ext/mysqli目录下

/home/zfadmin/php825/arm4/bin/phpize
CC=arm-linux-gnueabihf-gcc ./configure --with-php-config=/home/zfadmin/php825/arm4/bin/php-config --with-mysqli=mysqlnd --host=arm-linux-gnueabihf

会在对应扩展目录下,如/home/zfadmin/php825/arm4/lib/php/extensions/no-debug-non-zts-20220829中生成相应的so文件

六、移植到ARM

        在php.ini中指定extension绝对路径

extension=/opt/web/php-8.2.5-armv7/lib/php/extensions/no-debug-non-zts-20220829/redis.so

        在 /etc/profile中添加查找php.ini的路径

export PHP_INI_SCAN_DIR=/opt/web/php-8.2.5-armv7/lib

        以下是一些php查找相关扩展/配置文件路径的相关语句

//查看php版本
[root@EPC-M6Y2C bin]# ./php -v
PHP 8.2.5 (cli) (built: May  8 2023 17:57:41) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.5, Copyright (c) Zend Technologies



//查找配置文件的路径  
[[root@EPC-M6Y2C bin]# ./php --ini
Configuration File (php.ini) Path: /home/zfadmin/php825/arm/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: /opt/web/php-8.2.5-armv7/lib
Additional .ini files parsed:      /opt/web/php-8.2.5-armv7/lib/php.ini



//查看可以找到的所有扩展
[root@EPC-M6Y2C bin]# ./php -m   
[PHP Modules]
Core
date
hash
json
libxml
pcre
random
redis
Reflection
session
SPL
standard

[Zend Modules]


//查看phpinfo()
[root@EPC-M6Y2C bin]# ./php -i
phpinfo()
PHP Version => 8.2.5

System => Linux EPC-M6Y2C 4.14.98 #1 SMP Wed Mar 8 15:32:50 CST 2023 armv7l
Build Date => May  8 2023 17:57:22
Build System => Linux ubuntu 4.4.0-148-generic #174~14.04.1-Ubuntu SMP Thu May 9 08:17:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Configure Command =>  './configure'  '--prefix=/home/zfadmin/php825/arm' '--host=arm-linux-gnueabihf' '--enable-session' '--with-libxml=/home/zfadmin/xml2_v211/arm' '--without-sqlite3' '--disable-libxml' '--disable-all' '--without-config-file' 'host_alias=arm-linux-gnueabihf'
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /home/zfadmin/php825/arm/lib
Loaded Configuration File => (none)
Scan this dir for additional .ini files => /opt/web/php-8.2.5-armv7/lib
Additional .ini files parsed => /opt/web/php-8.2.5-armv7/lib/php.ini

PHP API => 20220829
PHP Extension => 20220829
Zend Extension => 420220829
Zend Extension Build => API420220829,NTS
PHP Extension Build => API20220829,NTS
Debug Build => no
Thread Safety => disabled
………………………………

指定httpd.conf运行:./httpd  -f  /opt/web/apache-2.4.57-armv7/conf/httpd.conf

apache中的phpinfo()和./php -i中的phpinfo不是同一个来源,apache中的是指libphp.so文件,而./php的是对应php的phpinfo。

提示找不到QMYSQL驱动,需要把mysql客户端mysqlclient.so安装路径下的lib依赖环境设置到/etc/profile中

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LanSe___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值