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

JUSTG提供俄罗斯和南非CN2 GIA主机年$49.99美元JUSTGgia南非cn2南非CN2justG

JUSTG,这个主机商第二个接触到,之前是有介绍到有提供俄罗斯CN2 GIA VPS主机活动的,商家成立时间不久看信息是2020年,公司隶属于一家叫AFRICA CLOUD LIMITED的公司,提供的产品为基于KVM架构VPS主机,数据中心在非洲(南非)、俄罗斯(莫斯科),国内访问双向CN2,线路质量不错。有很多服务商实际上都是国人背景的,有的用英文、繁体搭建的冒充老外,这个服务商不清楚是不是真...

Linode 18周年庆典活动 不断改进产品结构和体验

今天早上相比很多网友和一样收到来自Linode的庆祝18周年的邮件信息。和往年一样,他们会回顾在过去一年中的成绩,以及在未来准备改进的地方。虽然目前Linode商家没有提供以前JP1优化线路的机房,但是人家一直跟随自己的脚步在走,确实在云服务器市场上有自己的立足之地。我们看看过去一年中Linode的成就:第一、承诺投入 100,000 美元来帮助具有社会意识的非营利组织,促进有价值的革新。第二、发...

华纳云,3折低至优惠云服务器,独立服务器/高防御服务器低至6折,免备案香港云服务器CN2 GIA三网直连线路月付18元起,10Mbps带宽不限流量

近日华纳云发布了最新的618返场优惠活动,主要针对旗下的免备案香港云服务器、香港独立服务器、香港高防御服务器等产品,月付6折优惠起,高防御服务器可提供20G DDOS防御,采用E5处理器V4CPU性能,10Mbps独享CN2 GIA高速优质带宽,有需要免备案香港服务器、香港云服务器、香港独立服务器、香港高防御服务器、香港物理服务器的朋友可以尝试一下。华纳云好不好?华纳云怎么样?华纳云服务器怎么样?...

php环境搭建为你推荐
flash导航条如何用Flash制作简单的导航栏工信部备案怎样在工信部进行域名备案?要详细工信部备案去国家工信部备案需要什么手续呢自助建站自助建站到底好还是不好微信如何建群微信可以建立两个人的群吗?有一个是自己godaddyGO DADDY服务器空间域名怎么样2012年正月十五山西省太原市2012年正月十五活动的相关情况iphone6上市时间苹果6什么时候出?多少钱分词技术怎样做好百度分词技术和长尾词优化怎么上传音乐怎么上传音乐到网上
域名服务dns的主要功能为 注册cn域名 krypt 联通c套餐 siteground 美国翻墙 12306抢票攻略 牛人与腾讯客服对话 本网站在美国维护 免费cdn 彩虹云 空间购买 web服务器是什么 上海电信测速 电信网络测速器 群英网络 免费个人网页 阵亡将士纪念日 阿里云邮箱个人版 美国主机侦探 更多