2024年3月20日发(作者:)
一、源码下载
首先登陆apache官网下载最新源码
找一个中国的地址
找到httpd目录
下载最新版本
二、工作环境
属性 属性值
源码目录 /home/workspace/SourceCode
交叉编译目录 /home/workspace/CorssComp/httpd-2.4.2
本地编译目录 /home/workspace/LocalComp/httpd-2.4.2
交叉编译器版arm-linux-gcc 4.5.1 v6
本
本地编译器版gcc 4.7.0
本
操作系统 ArchLinux 3.0
系统安装包 base;base-devel;
三、本机编译
解压源码
进入目录进行配置
报错,没有找到APR
登陆apr网站下载/
选择一个中国服务器
下载tar压缩包
解压
配置PC版本
编译make
安装
返回apache继续配置
继续遇到问题
需要下载apr-util,还是回到刚才的网站/
在下面就可以下载
顺便把iconv也装了,免得待会报错
解压(这张截图错了,知道是怎么回事就好了)
配置
提示找不到apr,手动指定路径
编译
安装
解压
编译
同样手动指定路径
编译
安装
返回apache继续配置,顺便给apr手动指定路径
配置成功,开始编译。喝杯咖啡慢慢等吧
注意编译结束不需要安装哦
准备工作都做好后,现在开始交叉编译
四、交叉编译
1、交叉编译apr
解压
配置
出现错误
需要手动给它带一个参数,跳过检查文件系统
还是有错误,再带一个参数
出现错误
在configure文件中查找cannot run test program while cross compiling
将蓝色标注的代码删除,总共有三处
继续配置,并顺便给它指定一个路径
好了,可以开始编译
一上来就遇到一个错误,好受打击
它提示iovec被重复定义了,这好办
找到目录下
/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr
/include/bits/uio.h文件,将蓝色代码删除。注意保存副本,在交叉编译完
mysql将它还原。
继续编译
安装
2、交叉编译apr-util
解压
配置
编译
安装
3、编译apr-iconv
解压
配置
编译
安装
4、安装pcre
下载pcre,官网/
解压
配置
编译
安装
4、编译apache(重头戏开始了)
解压
配置
这里我直接给出配置命令,不解释这么多了,自己慢慢琢磨吧。这可是我试了无
数回,失败了无数次才得以成功的配置命令。
./configure --host=arm-linux --prefix=/sdcard/apache --enable-so
--with-mpm=prefork 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_void_ptr_lt_long=no ap_cv_void_ptr_lt_long=no --enable-module=so
--enable-mods-shared=all --enable-deflate=shared
--enable-expires=shared --enable-rewrite=shared
--with-mysql=/sdcard/mysql --enable-headers --enable-deflate
--enable-cache --enable-file-cache --enable-mem-cache
--enable-disk-cache --with-apr=/sdcard/apache/apr
--with-apr-util=/sdcard/apache/apr-util --enable-mime-magic
--enable-authn-dbm --enable-vhost-alias
--with-pcre=/sdcard/apache/pcre/bin/pcre-config ap_cv_apuver12=yes
注意此处需要mysql的头文件,如果需要用到请先参照MySQL-5.5.24交叉编译
图文版教程编译Mysql,或者去除--with-mysql=/sdcard/mysql选项
好的,一路配置下来非常成功,高歌直下
遇到了非常熟悉的binary错误,小case将其解决
继续编译
一路下来很成功,直接make install
至此一切便大功告成啦
五、进阶
如果你想开启更多的apache功能模块,编译一个全能的apache
可以使用以下这条配置命令
./configure --host=arm-linux --prefix=/sdcard/apache --enable-so
--with-mpm=prefork ac_cv_file__dev_zero=yes
ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes
apr_cv_mutex_robust_shared=yes pr_cv_tcp_nodelay_with_cork=yes
ap_void_ptr_lt_long=no ap_cv_void_ptr_lt_long=no --enable-module=so
--enable-mods-shared=all --enable-deflate=shared
--enable-expires=shared --enable-rewrite=shared
--with-mysql=/sdcard/mysql --enable-headers --enable-deflate
--enable-cache --enable-file-cache --enable-mem-cache
--enable-disk-cache --with-apr=/sdcard/apache/apr
--with-apr-util=/sdcard/apache/apr-util --enable-mime-magic
--enable-authn-dbm --enable-vhost-alias
--with-pcre=/sdcard/apache/pcre/bin/pcre-config ap_cv_apuver12=yes
--enable-modules=all --enable-cache --enable-file-cache
--enable-static-support --enable-static-htpasswd
--enable-static-htdigest --enable-static-rotatelogs
--enable-static-logresolve --enable-static-htdbm --enable-static-ab
--enable-static-checkgid
--enable-static-htcacheclean --enable-static-httxt2dbm
--enable-static-fcgistarter --enable-http --enable-mod_cgi
--enable-proxy --enable-proxy-connect --enable-proxy-ftp
--enable-proxy-http --enable-proxy-scgi --enable-proxy-fcgi
--enable-proxy-fdpass --enable-proxy-ajp --enable-proxy-express
--enable-proxy-balancer --enable-authn-alias --enable-isapi
--enable-mem-cache --enable-bucketeer --enable-case-filter
--enable-case-filter-in --enable-cern-meta --enable-ident
--enable-unique-id --enable-distcache --enable-optional-hook-export
--enable-optional-hook-import --enable-optional-fn-import
--enable-optional-fn-export --enable-dav --enable-info --enable-suexec
--enable-cgi --enable-cgid --enable-dav-fs --enable-dav-lock
--enable-imagemap --enable-speling --enable-exception-hook
--enable-load-all-modules --enable-dbd --enable-data
--enable-ratelimit --enable-reflector --enable-luajit
--enable-lbmethod-byrequests --enable-lbmethod-bytraffic
--enable-lbmethod-bybusyness --enable-lbmethod-heartbeat
--enable-mpms-shared=all --enable-heartbeat --enable-heartmonitor
--enable-v4-mapped --with-libxml2 --with-ldap
使用这条配置命令可以基于1~3的工作进行,不需要额外编译其它库文件
强制开启了大多数模块,除了少数还需要编译库文件如ldap等除外
总共有103个模块
当然运行时不建议一次过全部加载
这样会影响运行效率又不必要
将它全部编译是为了能够需要时动态的加载而不用再去编译了
另附一条带ldap的编译命令
env CC=arm-linux-gcc CXX=arm-linux-g++
CPPFLAGS="-I/sdcard/apache/include -I/usr/local/include"
LDFLAGS="-L/sdcard/apache/lib" ./configure --host=arm-linux
--prefix=/sdcard/apache --enable-so
--with-mpm=prefork ac_cv_file__dev_zero=yes
ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes
apr_cv_mutex_robust_shared=yes pr_cv_tcp_nodelay_with_cork=yes
ap_void_ptr_lt_long=no ap_cv_void_ptr_lt_long=no --enable-module=so
--enable-mods-shared=all --enable-deflate=shared
--enable-expires=shared --enable-rewrite=shared
--with-mysql=/sdcard/mysql --enable-headers --enable-deflate
--enable-cache --enable-file-cache --enable-mem-cache
--enable-disk-cache --with-included-apr --enable-mime-magic
--enable-authn-dbm --enable-vhost-alias
--with-pcre=/sdcard/apache/pcre/bin/pcre-config ap_cv_apuver12=yes
--enable-modules=all --enable-cache --enable-file-cache
--enable-static-support --enable-static-htpasswd
--enable-static-htdigest --enable-static-rotatelogs
--enable-static-logresolve --enable-static-htdbm --enable-static-ab
--enable-static-checkgid
--enable-static-htcacheclean --enable-static-httxt2dbm
--enable-static-fcgistarter --enable-http --enable-mod_cgi
--enable-proxy --enable-proxy-connect --enable-proxy-ftp
--enable-proxy-http --enable-proxy-scgi --enable-proxy-fcgi
--enable-proxy-fdpass --enable-proxy-ajp --enable-proxy-express
--enable-proxy-balancer --enable-authn-alias --enable-isapi
--enable-mem-cache --enable-bucketeer --enable-case-filter
--enable-case-filter-in --enable-cern-meta --enable-ident
--enable-unique-id --enable-distcache --enable-optional-hook-export
--enable-optional-hook-import --enable-optional-fn-import
--enable-optional-fn-export --enable-dav --enable-info --enable-suexec
--enable-cgi --enable-cgid --enable-dav-fs --enable-dav-lock
--enable-imagemap --enable-speling --enable-exception-hook
--enable-load-all-modules --enable-dbd --enable-data
--enable-ratelimit --enable-reflector --enable-luajit
--enable-lbmethod-byrequests --enable-lbmethod-bytraffic
--enable-lbmethod-bybusyness --enable-lbmethod-heartbeat
--enable-mpms-shared=all --enable-heartbeat --enable-heartmonitor
--enable-v4-mapped --with-libxml2 --with-ldap
--with-ldap-include=/sdcard/apache/include
--with-ldap-lib=/sdcard/apache/lib --enable-ldap --enable-authnz-ldap
这条命令需要ldap库的支持,在这里我简单说一下编译ldap的过程
首先编译sasl,然后编译ldap。编译这两样东西都会遇到大量的错误
需要将apr和apr-util放到apache的srclib文件夹中重新一起编译
六、运行
将apache启动的方式我就不多说了
和X86的启动方式一模一样
只需要将apache拷贝到arm中相应的目录即可
可能遇到的问题:运行时可能会遇到一些未知的错误,如IP,端口等问题。这
一般涉及两个方面的原因,一、apache的运行配置文件没有得到正确的配置。
二、由于arm-linux本身很多功能被裁剪掉了,会导致一些模块功能无法运行,
把这些模块注释掉即可,或者考虑重新编译arm-linux。


发布评论