动态基于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上以后需要修改相应权限才能进行

Webhosting24:$1.48/月起,日本东京NTT直连/AMD Ryzen 高性能VPS/美国洛杉矶5950X平台大流量VPS/1Gbps端口/

Webhosting24宣布自7月1日起开始对日本机房的VPS进行NVMe和流量大升级,几乎是翻倍了硬盘和流量,价格依旧不变。目前来看,日本VPS国内过去走的是NTT直连,服务器托管机房应该是CDN77*(也就是datapacket.com),加上高性能平台(AMD Ryzen 9 3900X+NVMe),还是有相当大的性价比的。此外在6月30日,又新增了洛杉矶机房,CPU为AMD Ryzen 9...

VinaHost,越南vps,国内延时100MS;不限流量100Mbps

vinahost怎么样?vinahost是一家越南的主机商家,至今已经成13年了,企业运营,老牌商家,销售VPS、虚拟主机、域名、邮箱、独立服务器等,机房全部在越南,有Viettle和VNPT两个机房,其中VNPT机房中三网直连国内的机房,他家的产品优势就是100Mbps不限流量。目前,VinaHost商家发布了新的优惠,购买虚拟主机、邮箱、云服务器、VPS超过三个月都有赠送相应的时长,最高送半年...

HostKvm($4.25/月),俄罗斯CN2带宽大升级,俄罗斯/香港高防限量5折优惠进行中

HostKvm是一家成立于2013年的国外VPS服务商,产品基于KVM架构,数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月,商家旗下俄罗斯、新加坡、美国、香港等节点带宽进行了大幅度升级,俄罗斯机房国内电信/联通直连,CN2线路,150Mbps(原来30Mbps)带宽起,目前俄罗斯和香港高防节点5折骨折码继续优惠中...

php环境搭建为你推荐
伪装微信地理位置如何用伪装微信地理位置?真正免费的网络电话谁知道哪个真正免费的网络电话啊?告诉我把3?太感谢了在线漏洞检测如果检测网站是否有漏洞?中国论坛大全甘肃论坛都有哪些?eset最新用户名密码ESET4.0最新用户名和密码依赖注入依赖注入是什么意思?申请证书申请毕业证书唱吧电脑版官方下载电脑上可以安装唱吧吗?网店推广网站什么平台适合做淘宝店铺推广神雕侠侣礼包大全神雕侠侣手游版四重大礼包怎么得到啊?
vps是什么 新秒杀 服务器评测 樊云 kvmla bbr 免费ftp站点 台湾谷歌网址 165邮箱 美国在线代理服务器 搜索引擎提交入口 下载速度测试 什么是web服务器 中国联通宽带测速 卡巴斯基试用版下载 apnic 服务器托管价格 SmartAXMT800 512内存 apachetomcat 更多