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

pacificrack7月美国便宜支持win VPS,$19.99/年,2G内存/1核/50gSSD/1T流量

pacificrack发布了7月最新vps优惠,新款促销便宜vps采用的是魔方管理,也就是PR-M系列。提一下有意思的是这次支持Windows server 2003、2008R2、2012R2、2016、2019、Windows 7、Windows 10,当然啦,常规Linux系统是必不可少的!1Gbps带宽、KVM虚拟、纯SSD raid10、自家QN机房洛杉矶数据中心...支持PayPal、...

PIGYun月付14.4元起,美国洛杉矶/韩国VPS七月6折

PIGYun是成立于2019年的国人商家,提供香港、韩国和美西CUVIP-9929等机房线路基于KVM架构的VPS主机,本月商家针对韩国首尔、美国洛杉矶CUVIP-AS29、GIA回程带防御等多条线路VPS提供6-8.5折优惠码,优惠后韩国首尔CN2混合BGP特惠型/美国洛杉矶GIA回程带10Gbps攻击防御VPS主机最低每月14.4元起。下面列出几款不同机房VPS主机配置信息,请留意不同优惠码。...

WebHorizon($10.56/年)256MB/5G SSD/200GB/日本VPS

WebHorizon是一家去年成立的国外VPS主机商,印度注册,提供虚拟主机和VPS产品,其中VPS包括OpenVZ和KVM架构,有独立IP也有共享IP,数据中心包括美国、波兰、日本、新加坡等(共享IP主机可选机房更多)。目前商家对日本VPS提供一个8折优惠码,优惠后最低款OpenVZ套餐年付10.56美元起。OpenVZCPU:1core内存:256MB硬盘:5G NVMe流量:200GB/1G...

php环境搭建为你推荐
明星论坛如何建好明星论坛拂晓雅阁?英特尔和AMD有什么区别啊?怎么在qq空间里添加背景音乐怎么在QQ空间里插入背景音乐??9flash在“属性”对话框中的“Move”后面的框中输入Flash动画文件的绝对路径及文件名,这句话怎么操作?qq空间装扮qq空间怎么装扮彩信中心移动的彩信中心是?主页是?收不到彩信,怎么设置?xp系统停止服务XP停止服务后该怎么办?商标注册查询官网怎么查商标是否注册成功分词技术怎样做好百度分词技术和长尾词优化微信电话本怎么用微信电话本如何使用?
海外虚拟主机空间 美国服务器租用 vps租用 hostmaster siteground 搬瓦工官网 unsplash 双12活动 轻博 500m空间 anylink 免费mysql hkt 上海服务器 石家庄服务器托管 云服务器比较 杭州电信宽带优惠 酸酸乳 工信部icp备案查询 空间申请 更多