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

ZJI:520元/月香港服务器-2*E5-2630L/32GB/480G SSD/30M带宽/2IP

ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...

野草云提供适合入门建站香港云服务器 年付138元起 3M带宽 2GB内存

野草云服务商在前面的文章中也有多次提到,算是一个国内的小众服务商。促销活动也不是很多,比较专注个人云服务用户业务,之前和站长聊到不少网友选择他们家是用来做网站的。这不看到商家有提供香港云服务器的优惠促销,可选CN2、BGP线路、支持Linux与windows系统,支持故障自动迁移,使用NVMe优化的Ceph集群存储,比较适合建站用户选择使用,最低年付138元 。野草云(原野草主机),公司成立于20...

零途云月付31.9元起,香港cn2 gia线路

零途云是一家香港公司,主要产品香港cn2 gia线路、美国Cera线路云主机,美国CERA高防服务器,日本CN2直连服务器;同时提供香港多ip站群云服务器。即日起,购买香港/美国/日本云服务器享受9折优惠,新用户有优惠码:LINGTUYUN,使用即可打折。目前,零途云还推出性价比非常高香港多ip站群云服务器,有需要的,可以关注一下。零途云优惠码:优惠码:LINGTUYUN (新用户优惠,享受9折优...

php环境搭建为你推荐
伪静态什么是伪静态镜像文件是什么镜像文件是什么意思?9flashIE9flash模块异常。中小企业信息化中小企业如何进行企业信息化规划xv播放器下载求手机可以看xv格式的视频播放器bt封杀为什么现在网上许多BT下载都被封了?qq等级表谁能告诉我QQ等级列表?网页打不开的原因为什么我的网页打不开防钓鱼如何才能防钓鱼网站主板温度多少正常主板温度多少算正常?
2019年感恩节 主机测评网 mediafire下载工具 免费网站监控 xen debian7 台湾谷歌网址 hostker 申请网页 沈阳主机托管 googlevoice 上海联通 htaccess cpu使用率过高怎么办 alexa搜 侦探online 服务器是什么 以下 linux命令vi 域名商城 更多