经过若干天的努力,phpinfo()总算是返回结果了,虽然还有很多问题需要解决,但是这个过程还是值得总结一下的。
源码包版本:apache1.3.39 php5.5.6 linxu2.6.32 嵌入式平台为omap
1、在编译生成apache的过程中主要遇到了如下问题:
(1)getline函数的申明冲突了,与标准库中的getline函数起了冲突,解决的办法就是改个名字了,kscope在这里帮了大忙的了
(2)gen_test_char什么的相关的错误,不是很明白什么原因,经过查找资料才发现,应为是交叉编译,在申城的过程中需要调用一些相关的中间生成的文件,可是在主机环境下无法执行交叉编译得到的那些中间程序,解决的办法就是采用编译两套源码的方法,首先用在主机的环境下用主机的gcc编译并生成apache相关的程序,然后在交叉编译的时候,将主机环境下生成的gen_test_char程序直接复制到对应的位置了,同样的还有一个gen_uri_**什么的相关的问题也是如此了,具体在哪里找到这两个文件,在用gcc编译得到的结果里面find一下就找到了,然后copy到制定位置
2、在编译php的时候,基本没出现什么问题,只是第一次编译生成的和apache配合无法解析php文件,在编译的过程中印象当中只是报了一个关于ldopen,ldclose相关的未定义的错误了 修改Makefiel文件在EXTRA_LIBS 后面加上-ldl 解决了
编译过程没有遇到什么非常特别的问题,这里值得思考的是,在移植apache和php的过程中,需要对apache的源码分别在主机环境和目标环境下编译两次,我为了保险起见,都执行了make install 当然在configure的时候都配置了prefix,这样我就知道到底生成了哪些文件,在php的生成过程中,应为我几乎禁用了所有的模块,只是启用了很少几个模块,所以并有用到两次编译生成php的过程,但是我想如果需要考虑其他的模块的话,很可能需要采用这种两次编译的方式,应为在编译的时候,很可能编译的源码包需要一些中间生成的库文件或者程序的支持和处理,而主机环境下是不能直接运行目标环境下的代码的,所以有的时候可能需要借助主机环境下编译得到的中间程序,来生成交叉编译环境下的程序,这一点是值得思考的!!!
还有一个值得思考的问题就是apache 和php的编译生成好了,apache也启动了能够请求html页面了,可是怎么解析php呢,就是怎么让apace调用php呢??
还是google得到结果:
http://www.php.net/manual/zh/install.unix.apache.php 参考文档进行设置
到这一步的时候 :
LoadModule php5_module libexec/libphp5.so
才发现问题的所在
在编译php的时候,必须制定apache的apxs,然后编译php的过程就会在apache的libexec文件夹下生成libphp5.so文件,很明显我的目标板的apache/libexec文件夹下是不存在这个文件了,于是重新配置和编译php
./configure --prefix=/安装路径/ --with-apxs=/apache的安装路径/apache/bin/apxs(这个参数很重要) --with-sqlit 然后就是其他的一些参数了
这就是为什么需要对apache编译两次了,如果在制定apxs的时候,指定的是目标系统下的apache中的apxs那么在配置php的时候,就会检测出apxs无法执行,很显然,在配置php的时候需要用到apache的apxs这个程序了,抱着试试的心态,用主系统环境下的apxs代替了,重新编译生成,这个时候如所预计的一样,在apxs对应的apache/libexec目录下生成了libphp5.so文件,于是我将该文件复制到了目标系统的apache对应的文件夹下面,然后按照配置文档的内容尽心配置,phpinfo正常工作了,yes!!
apache就相当与一个管家,接管了http请求,然后按照配置参数来解析php文件,并将解析的文件发送回客户端口,大概的配置流程如下:
(1)、LoadModule 加载php模块
(2)、告诉apache如何解析php后缀的文件
重启apache这个时候php就能够被解析了!
下一部,就是移植mysql了, come on!!