动态基于ARM11的PHP动态扩展库环境的搭建.

php环境搭建  时间:2021-02-12  阅读:()

基于ARM 1 1的PHP动态扩展库环境的搭

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发文档控制记录

II

目录

文档控制记录. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .II

1.引言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

2.搭建步骤及相关说明. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

2.1概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

2.2学习文档. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

2.2搭建步骤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

3.主要问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7

1、动态库的三个不同名字及含义. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7

2、如何实现:动态库→ftp→ARM11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10

3、ARM1 1环境下动态库无法加载. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

1.引言

目的本文档旨在约束ARM 11在嵌入式下的WEB开发过程主要针对PHP扩展库的撰写不包括WEB本身的框架设计和搭建。

约束 P HP脚本调用P HP扩展库扩展库封装开发板动态库的方式

对象嵌入式WE B开发的界面设计人员、 P HP库接口封装人员、 C库封装人员参考文档

StmAtmV3.0嵌入式WEB PHP扩展库设计(20110727)》 PHP扩展》 –Liunx开发学习文档》 –arm下p hp动态库如何加载.html》 p hp动态库.html》 so name.html》ftp相关命令.ht ml》 -- 1 / 17 《 《 《 《 《 《动态库《

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

2.搭建步骤及相关说明

2.1概述

本次《基于ARM 11的动态扩展库环境的搭建》 用了将近一周半的时间才收尾 中途遇到大量的问题并且有些问题的解决方法出乎常理逻辑通过一些特殊手段和方法才得以解决后面会一一列出解决方法和相关注意事项……

2.2学习文档

此次ARM 1 1动态库环境的搭建需优先参考《StmAtmV3.0嵌入式WEB PHP扩展库设计(20110727)》 、 《L iunx开发学习文档》其中的动态库制作部分、 《P HP扩展》 参照以上几个文档虽可以搭建出一个基本框架但是在ARM 11环境下很多问题便一一暴露加上网络上资源有限很多问题都是靠反复验证才得以解决最终搭建出支持动态库加载的配置环境。

2.2搭建步骤

1、所需软件 已搭建好能够实现网页制作的apache+p hp、 arm-linux-gc c交叉编译环境具体详见《基于S3c6410的WEB开发环境的搭建》 -杨洪。

2、搭建具体步骤为

1)制作第三方动态库*.so扩展库.

2)制作P HP动态扩展库

3、制作第三方动态库*.so扩展库

编写源函数保存为he llo test.c#inc lud e<std io.h>

#inc lude<s td lib.h>int he llo_add(int a, int b)

{return(a+b);

}

编写头文件(函数的声明)保存为he llote st.h

测试代码test.c#inc lude<std io.h>

#inc lude<s td lib.h>

#inc lude“he llo test.h”

Int main(vo id)

{int nret=0;

2/ 17 Int hello_add(int a, int b);

基于ARM 1 1的PHP动态扩展库环境的搭建

嵌入式开发

}nret=he llo_add(2,5);printf(“he llo_add(2,5)=%d\n”,nret); return 0;

交叉编译生成动态链接库*.so后面会对此做详细介绍此处不再累赘注意动态库的三个不同的名字 lin。

此处采用Make file的方式这样编译C程序以及对其修改会方便很多其中的符号可以查看相关书籍此处不再做介绍

最后编译完结果会在文件下出现hellotest.c hellotest.h hellotest.o libhellote st.so libhellotest.so.1lib he llote st.so.1.0.0

其中的箭头符号为所建立的链接

3/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

相关Make file

测试动态库超级用户下拷贝*.so库函数到板卡的/lib目录下编写测试代码进行测试 -I库头文件路径 –L库文件路径 –l库的链接[root@yangho nglib he llote st]#cp lib he llo test.so.1 /lib/

[root@yanghong lib he llote st]#cp test/lib/

在板卡上运行./tes t可看到显示结果he llo_add(2,5)=7则证明第三方*.so是无误的。

下面是如何将*.s o编译进P HP扩展库。

4/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

4、制作P HP扩展库:

对这部分内容对原理不清楚可参照文档《StmAtmV3.0嵌入式WEB PHP扩展库设计(20110727)》 此处纯粹给出操作性的指导。

自动构建系统在PHP源码/us r/loca l/apac he-arm11/p hp-4.4.8/e xt执行如下操作

[yanghong@yanghong ext]$./ext_skel--extname=te st

会出现上面的配置界面并且自动生成config.m4、 p hp_te ts.h、 te st.c等几个文件依次做如下修改

1)修改config.m4文件去掉dnl此处推荐使用--enab le

PHP_ARG_ENABLE(test,whether to enable test support,

Make sure that the comment is aligned:

[ --enable-test Enable test support])if te st "$PHP_TES T" !="no"; then

2)修改php_tet s.h文件

PHP_FUNCTION(confirm_test_comp iled); /*For testing, remove later. */PHP_FUNCTION(p hp_he llo_add);

3)修改te s t.c文件

修改处1zend_function_entry test_functions[]={

PHP_FE(confirm_test_comp iled,NULL)/*For testing, remove later. */

PHP_FE(php_hello_add,NULL) {NULL,NULL,NULL} /*Must be the last line intest_functio ns[] */5/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

};

修改处2

PHP_FUNCTION(p hp_he llo_add)

{long int a,b;long int result;if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ll",&a,&b)==FAILURE)

{return;

}

result=he llo_add(a,b);

RETURN_LONG(res ult);

}

其中 php_he llo_add为P HP脚本可直接调用的扩展函数。

扩展模块编译[yanghong@yanghong php-4.4.8]$cd ext/test

[yanghong@yanghong test]$/usr/local/php/bin/phpize

[yanghong@yanghong test]$

C C=arm-linux-gc c./c o nfigure--ho st=a rm-linux

--with-php-co nfig=/usr/local/apac he-arm11/p hp/b in/p hp-co nfig--enab le-test[yanghong@yanghong test]$make LDFLAGS=-lhellotest

[yanghong@yanghong test]$make install

Insta lling s hared e xte ns io ns:

/usr/local/apac he-arm 11/p hp/lib/p hp/e xtens io ns/no-deb ug-no n-zts-20020429/到此为止一个P HP扩展库编写成功.

下面进行测试:

拷贝php扩展库到开发板的扩展库目录下

[yanghong@yanghong test]$cp

/usr/local/apac he-arm 11/p hp/lib/p hp/e xtens io ns/no-deb ug-no n-zts-2

0020429/test.so/usr/local/apac he-arm11/p hp/lib/p hp/e xtens io ns/

拷贝第三方*.so到板卡的/lib或者/usr/lib下

[yanghong@yanghong test]$cp libhellote st.so.1 /lib/

注意后面的目录依次为开发板上对应的文件系统的目录

编写php测试代码

<?php

6/ 17

基于ARM11

的P HP动态扩展库环境的搭建

嵌入式开发dl("te s t.so");

$result=he llo_add(9,5);print("he ll_add(9,5)=$re sult<BR>");

?>

测试结果显示为所需要的结果。

3.主要问题

1、动态库的三个不同名字及含义

-----参考《动态库s o name.ht ml》

第一个是共享库本身的文件名real name 其通常包含版本号常常是是这样 lib math.so.1.1.1234。 lib是Linux上的库的约定前缀 math是共享库名子so是共享库的后缀名 1.1.1234的是共享库的版本号其主版本号+小版本号+build号。主板号代表当前动态库的版本如果动态库的接口有变化 那么这个版本号就要加1后面的两个版本号小版本号和build号是告诉你详细的信息 比如为一个ho t-fix而生成的一个版本其小版本号加1 b uild号也应有变化。 这个文件名包含共享库的代码。

第二个是动态库的soname  Short for shared object name 其是应用程序加载dll时候其寻找共享库用的文件名。其格式为lib+math+.so+(major vers ion numb er)

其只包含major version number换句话说也就是只要其接口没有变应用程序都可以用不管你其后minor build version or build version。

问题来了程序运行时怎么通过soname找个real name Soname存在哪里如果与real name关联起来什么时候存的

这就是接下来要介绍的第三个共享库的名字 link name顾名思义就是在编译过程 link阶段用的文件名。其将so nmae和rea l name关联起来。

第三个名字共享库的连接名link name 是专门为build阶段连接而用的名字。这个名字就是lib+math+.s o,比如lib math.s o。其是不带任何版本信息的。在共享库编译过程中连接link 阶段编译器将生成一个共享库及real name

同时将共享库的soname写在共享库文件里的文件头里面。可以用命令reade lf-d share library去查看。

7/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

在应用程序引用共享库时其会用到共享库的link name。在应用程序的link阶段其通过

link名字找到动态库并且把共享库的so name提取出来写在自己的共享库的头里面。当应用程序加载时候就会通过soname去在给定的路径下寻找该共享库。在本程序中也做了三个动态库 libhellotest.so.1.0.0(real name)、lib he llote st.so.1(soname)、 lib he llote st.so(link name),正如Make file注释里面强调的

#NOTE:

#本机只做进行链接时需要的libhe llotest.so,所以libhe llotest.so.1到arm开发板上装载时再做符号链接也可直接将做好链接后的lib he llo test.so.1拷贝过去也能成功使用

#并且本机链接前需要把lib he llotst.so.1.0.0先拷贝的根目录的lib/下链接的时候才会去链接交叉编译器对应目录的动态库(原因未知且出乎寻常逻辑)

#然后将链接时必须的lib he llotest.s o拷贝的交叉编译器的对应目录下进行动态链接……

#否则会生成默认的静态库具体原因未知。

如果不优先将lib he llotest.so.1.0.0拷贝到根目录下的lib/下会默认生成静态库可能是交叉编译器的影响如下所示

8/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发并会出现以下警告

;

从提示看出应该是链接工具libtoo l没有找到对应的动态库将lib he llo test.1.0.0

real name ,拷贝至根目录下的lib/下再进行make LDF LAGS=-lhe llotest

出现上面的错误似乎链接工具正确去链接了动态库的位置。

为了寻找链接工具究竟链接的是哪个目录下的动态库此处花费了大量的时间和精力去寻找。

特别注意

最终发现链接目录在交叉编译环境下的

/opt/F riendlyARM/too lschain/4.5.1/arm-no ne-linux-gnueab i/lib/

将lib he llote st.so(link name)拷贝至此目录下

再重新make LDF LAGS=-lhe llotes t

9/ 17

基于ARM 1 1的PHP动态扩展库环境的搭建嵌入式开发

由此可知成功编译出动态库然后再执行

make ins ta ll

则动态库成功的安装到了此目录下

/usr/local/apac he-arm11/p hp/lib/p hp/e xtens io ns/no-deb ug-no n-zts-20020429/

2、如何实现:动态库→ftp→ARM11

----参考《ftp相关命令.html》制作好的动态库te st.so及lib he llo test.so.1(soname)可以采取U盘 SD卡 FTP的方式转存到开发板上进行调试此处采取一种比较合理的方法FTP传输但是传输到ARM1 1上以后需要修改相应权限才能进行

丽萨主机122元/每季,原生IP,CN2 GIA网络

萨主机(lisahost)新上了美国cn2 gia国际精品网络 – 精品线路,支持解锁美区Netflix所有资源,HULU, DISNEY, StartZ, HBO MAX,ESPN, Amazon Prime Video等,同时支持Tiktok。套餐原价基础上加价20元可更换23段美国原生ip。支持Tiktok。成功下单后,在线充值相应差价,提交工单更换美国原生IP。!!!注意是加价20换原生I...

易探云:香港物理机服务器仅550元/月起;E3-1230/16G DDR3/SATA 1TB/香港BGP/20Mbps

易探云怎么样?易探云(yitanyun.com)是一家知名云计算品牌,2017年成立,从业4年之久,目前主要从事出售香港VPS、香港独立服务器、香港站群服务器等,在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。目前,易探云推出免备案香港物理机服务器性价比很高,E3-1230 8 核*1/16G DDR3/SATA 1TB/香港BGP线路/20Mbps/不限流量,仅...

轻云互联,香港云服务器折后22元/月 美国云服务器 1核 512M内存 15M带宽 折后19.36元/月

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:1.用户购...

php环境搭建为你推荐
雅虎天盾高手进来看看我该怎么办 新装的ie8 内存使用率达到100%了安装迅雷看看播放器怎样安装迅雷看看播放器网页打开很慢如何解决网速正常 网页打开很慢问题分词技术什么是seo分词技术srv记录SRV记录的简介网站地图制作网站地图 怎么制作?cisco防火墙juniper防火墙和cisco防火墙有什么区别office2007简体中文版office2007绿色下载 office2007下载安装南北互通从南方发往北方的产品一般是什么请客网中国有几种请客的原因
域名备案收费吗 主机 香港机房 59.99美元 北京主机 免费个人空间申请 e蜗 股票老左 如何用qq邮箱发邮件 免费网页空间 如何注册阿里云邮箱 帽子云排名 德讯 主机返佣 wordpress空间 时间服务器 海外加速 alexa搜 傲盾代理 blaze 更多