话说要在arm开发板的linux系统中运行apache服务器,需要在pc linux系统中交叉编译Apache源码,在网上参考了很多资料都是1.3版本的,最后终于找到apache 2移植到arm开发板的方法,现整理如下文。由于开发板的不同,可能这里出现的问题大家不会都遇到,但相信多数问题都已覆盖。
一、安装pcre
tar -xvzf pcre-8.31.tar.gz
cd pcre-8.31
./configure --prefix=$ARMROOTFS/usr/pcre --host=arm-linux CC=$TOOLCHAIN/arm-linux-gcc
make
make install
二、安装apr
这里特别提醒,先看一下后面的几点一些要注意的地方,特别是第⑤点
tar -xvzf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=$ARMROOTFS/usr/apr --host=arm-linux CC=$TOOLCHAIN/arm-linux-gcc ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=yes --cache=arm-linux.cache
这里简要说明一下如果不添加某些选项会出现的错误提示及一些需要特别注意的地方(这里按照我所记录的错误出现的顺序说明,而不是按上面选项的顺序):
①如果不添加ac_cv_file__dev_zero=yes(注意file和dev之间是两个下划线),则会出现错误:
check for /dev/zero... configure:error:cannot check for file existence when cross compile
②如果不添加ac_cv_func_setpgrp_void=yes,则会出现错误:
checking whether setpgrp takes no argument... configure: error: cannot check setpgrp when cross compiling
③选项--cache=arm-linux.cache中,arm-linux.cache为自己建立编写的文件(在编译过程中内容会被修改),在建立时需要自己写入如下内容(这个选项可能有些开发板不需要):
apr_cv_process_shared_works=yes
apr_cv_mutex_robust_shared=yes
如果不写入第一项,则会出现错误:
checking for working PROCESS_SHARED locks... configure:error: in `.../apr-1.4.6':
configure:error: cannot run test program while cross compiling
See `config.log' for more details
如果不写入第二项,则会出现:
checking for robust cross-process mutex support... configure: error: in `.../apr-1.4.6':
configure: error: cannot run test program while cross compiling
See `config.log' for more details
这些错误产生的原因在于这里在configure运行配置的过程中要运行几个测试程序来检验一些配置(个人理解),但在此处指定了编译时采用的编译器是交叉编译链,这几个测试程序都是经过交叉编译链编译产生的,而在宿主机系统上无法运行这些程序,因此只好自己手动指定这些检测程序最后运行的结果。
在以后为开发板配置软件包时遇到这种错误:configure:error:cannot run test program while cross compiling,应该都可以通过这种方法解决。
那么如果查找出这些表示结果的变量呢?只要在configure文件中搜寻这些错误的关键字即可,如这里的第一个项,我们可以搜寻:working PROCESS_SHARED locks,然后在configure文件中可以锁定到如下代码段:
C++代码...
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working PROCESS_SHARED locks">&5
$as_echo_n "checking for working PROCESS_SHARED locks... ">&6; }
if${apr_cv_process_shared_works+:}false; then :
$as_echo_n "(cached) ">&6
else
...
这里可以看出变量apr_cv_process_shared_works便是与这个程序运行结果关联的变量。
④如果不添加ac_cv_sizeof_struct_iovec=8选项,则会在使用make指令时出现错误:
./include/apr_want.h:95: error: redefinition of 'struct iovec'
make[1]: *** [passwd/apr_getpass.lo] 错误 1
⑤在添加了ac_cv_sizeof_stru