交叉编译apache php mysql_apache+php+mysql的嵌入式移植方法

经过了接近两个星期的研究,查阅了太多资料,编译的过程中出了很多问题,不断的在网络上搜寻答案。网上的编译移植版本有的有好几种,有的甚至没有,就这样不断的尝试,不断的失败,不断的从头开始,终于成功移植。

开发板:天嵌科技TQ3358

编译器:arm-linux-gcc 4.4.6版本

平台:ubuntu 11.10 amd64

嵌入式服务器的移植包括apache ,php ,mysql。这里我们用的版本分别是apache-2.2.20(httpd-2.2.20),php-5.3.6 ,mysql-5.1.69。

Apache-2.2.20的嵌入式移植

首先得说下,我之前移植的是apache-1.3.39,由于程序代码用的是2.2.20,所以移植进去之后有很多bug,后来又改成apache-2.2.20。这两个版本的移植方法稍微有些不同,不过也是大同小异。我之前找的一个移植版本说要先移植apr,pcre几个库,后来我又找了一种方法也就是下面的方法则不需要。

1.编译apache要编译两个版本,一个是基于PC的,一个是基于ARM的。首先将apache-2.2.20.tar.gz解压,目录可以自己选择,我这里分别解压到了两个目录,

Home/jason/PC/apache-2.2.20 和/home/jason/arm/apache-2.2.20.

2.先编译本机代码

#Cd Home/jason/PC/apache-2.2.20

3.# ./configure

4.# make 这里不需要make install,我们只是在编译基于ARM版的时候要用到这里的make后的几个文件。

5.编译基于arm的代码

这里有一点要特别注意,有的情况下我们需要apache运行在root下,比如如果php扩展了sockets功能,用到socket的相关函数,由于这类socket需要root权限,所以要让apache运行在root权限下。

那么要让apache运行在root下要做的就是:

在apache源码包的include/http_config.h文件里面,在文件的最开始添加下面几句:#ifndef BIG_SECURITY_HOLE#define BIG_SECURITY_HOLE#endif

然后再做下面的工作。最后记得做的就是讲apache的配置文件httpd.conf里面的user跟group选项都改成root,这样apache就可以以root权限运行了。

6.#Cd Home/jason/arm/apache-2.2.20

7.#CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/apache --enable-so --with-mpm=worker ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes apr_cv_tcp_nodelay_with_cork=yes ap_cv_void_ptr_lt_long=no

8.# make make的过程中出了一些错误,按照下面的方法解决即可

7.1error:redefinition of 'struct iovec'

解决方法:在 srclib/apr/include/apr_want.h中,注掉struct iovec {...}这个结构体

7.2 error./dftables: cannot execute binary file

解决方法:因为交叉编译出的文件不能在编译的主机上运行,所以将编译的本地版本 的/src/lib/pcre/dftables文件拷贝过来,覆盖掉原来的。

7.3 error :./gen_test_char :cannot execute binary file

解决方法:将本地编译生成的这个文件拷贝过来,覆盖掉原来的。

8.# make install

9.将/usr/local/目录下的apache文件夹复制到开发板的相同目录下,即/usr/local/下。不过我这里复制的时候出了些问题,有些库没有复制进去,开启httpd服务的时候根据错误提示又把这些库复制进去了。其实是电脑上的/usr/local/apache/lib里面有些库没有复制到开发板里面,只要单独将那些没有复制出来的库复制到开发板里面相同的目录下,也行。

10.由于apache拒绝使用root用户运行,所以要增加一个用户和用户组,具体做法就是在开发板的linux文件系统的/etc/目录中建立两个文件passwd,group。

passwd文件的内容如下:

root::0:0:root:/:/bin/sh

nobody::65534:65533:nobody:/:/bin/sh

group文件的内容如下:

nobody::65533

nogroup::65534:nobody

root::0:

users::100

11.修改配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值