apache mysql php交叉_交叉编译Apache+PHP+MySQL

想要在ARM上编译一套Apache+PHP+MySQL的系统:

所用系统:

Ubuntu10.04 LTS

编译环境:

Gcc-4.4.3

Arm-linux-gcc-4.5.1

所需源码:

Apache-1.3.39.tar.gz

Mysql-5.1.32.tar.gz

Php-5.2.9.tar.gz

Zlib-1.2.5.tar.gz

Libxml2-2.7.7.tar.gz

一、编译Mysql

1,  解压到/usr/local/,得到mysql-5.1.32,先进行本地编译。输入命令:

#./configure –prefix=/usr/local/mysql

#make

编译完成后将其改名为mysql-pc备用。(注意不要#make install)

2,Configure

再次解压mysql-5.1.32.tar.gz,得到mysql-5.1.32,进入目录,修改configure文件

# vim configure

注释以下代码:

21948 #if test"$cross_compiling" = yes; then

21949 #  { { $as_echo"$as_me:$LINENO: error: in \`$ac_pwd':" >&5

21950 #$as_echo "$as_me:error: in \`$ac_pwd':" >&2;}

21951 #{ { $as_echo "$as_me:$LINENO:error: cannot run test program while cross compiling

21952 #See \`config.log' for moredetails." >&5

21953 #$as_echo "$as_me:error: cannot run test program while cross compiling

21954 #See \`config.log' for moredetails." >&2;}

21955 #   { (exit1); exit 1; }; }; }

21956 #else

22025 #fi

30317 #  if test"$cross_compiling" = yes; then

30318 #  { { $as_echo"$as_me:$LINENO: error: in \`$ac_pwd':" >&5

30319 #$as_echo "$as_me:error: in \`$ac_pwd':" >&2;}

30320 #{ { $as_echo "$as_me:$LINENO:error: cannot run test program while cross compiling

30321 #See \`config.log' for moredetails." >&5

30322 #$as_echo "$as_me:error: cannot run test program while cross compiling

30323 #See \`config.log' for moredetails." >&2;}

30324 #   { (exit1); exit 1; }; }; }

30325 #else

30408 #fi

保存退出。

# configure --host=arm-linux--prefix=/usr/local/mysql

2,  Make

#export PATH=/opt/FriendlyARM/toolchain

#make

出现关于do_abi_check错误。

网上查了下,发现是由于gcc版本太高与mysql有冲突造成的。于是编辑Makefile,找到编译do_abi_check的部分,并将后面编译分操作全部隐掉。保存并退出。

# make

出现错误

make[2]: Leaving directory `/home/zhaowg/mysql-pc/sql'

./gen_lex_hash > lex_hash.h-t

/bin/sh: ./gen_lex_hash: cannotexecute binary file

make[1]: *** [lex_hash.h] 错误 126

这是由于编译的arm类型的程序不能在PC上运行造成的,于是前面做的准备工作派上用场了:

# cp ../mysql-pc/sql/gen_lex_hashsql/

# make

sql_parse.cc:5432:21: operator'

make[3]: *** [sql_parse.o] 错误 1

检查 sql_parse.cc的5432行,发现 宏变量STACK_DIRECTION没有定义初值,网上查找资料发现arm中定义STACK_DIRECTION为1,于是在文件开头加上一行:

# define STACK_DIRECTION 1

保存退出。

# make

完成

4、makeinstall all

# make install all

一定是makeinstall all,只是make install的话只会编译库,一些可执行程序是不会编的。

会停在

make    INSTALL_TO_DIR="/usr/local/mysql/mysql-test"install_test_files

make[4]: Entering directory`/home/zhaowg/mysql-pc/mysql-test'

一段时间,不要以为出错了,耐心等一会!

二、编译Apache

总体上需要两个步骤:

1、编译本机代码

2、利用本机代码进行交叉编译

这是因为在编译apache时,需要使用编译生成的工具制作后续编译使用的头文件,交叉编译工具没法在本地运行,因此需要本地编译生成的工具。将apache-1.3.39分别解压到/root/workspace/Apache/source/(本地编译用),/root/workspace/Apache/arm/(交叉编译用):

#cd /root/workspace/Apache/source/apache-1.3.39/src

注意一定是src目录

#./configure 所有参数都默认

#make

应该没什么问题,默认的安装目录为/usr/local/apache,我们这里不用安装。 准备交叉编译:

#cd /root/workspace/arm/apache-1.3.39

先修更新环境变量,在命令行下键入:#export PATH=/opt/ gcc-4.3.2-glibc-2.7/bin:$PATH

运行arm-vfp-linux-gnu-gcc -v可以查看环境变量已修改

#export CC=arm-linux-gcc

#./configure--prefix=/usr/local/apache

修改src/main/Makefile这个文件:

uri_delims.h: gen_uri_delims

./gen_uri_delims>uri_delims.h

test_char.h: gen_test_char

./gen_test_char>test_char.h

修改为 uri_delims.h: gen_uri_delims

/home/liubonan/source/apache-1.3.39/src/main/gen_uri_delims>uri_delims.h

test_char.h: gen_test_char

/home/liubonan/source/apache-1.3.39/src/main/gen_test_char>test_char.h

这里借用了刚才编译生成的本机代码里的工具,然后

#make

#make install

最后将/usr/local/apache拷贝到板子上的/usr/local/ 以上所有步骤都是在root权限下执行的,修改/usr/local/apache/conf/httpd.conf User nobody Groupnobody

#cd /usr/local/apache/bin

三、编译PHP:

方法基本与之前相同。先编译本地PHP,在交叉编译PHP。

1,编译本地PHP程序:

将PHP解压之后,进入,键入命令:

#./configure

#make

编译完成之后不要键入make install,程序留着备用。

2,  交叉编译PHP程序:

将上面编译完成的目录修改为mysql-pc,然后再解压mysql,进入相关目录。

1)  编译zlib

#export CC=arm-linux-gcc

#./configure --sahred --prefix=/opt/FriendlyARM/toolchain/4.5.1/arm-none-linux-gnueabi

#make

#make install

(编译的安装路径一定是交叉编译器的安装路径,否则在编译PHP时会报找不到)

2)  编译libxml2

#export CC=arm-linux-gcc

#./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolchain/4.5.1/arm-none-linux-gnueabi

#make

#make install

(安装到/usr/local/arm/4.5.1/arm-linux下的原因同上)

3)  编译PHP

(1)   #CC=arm-linux-gcc

#./configure --host=arm-linux

--prefix=/usr/local/php

--enable-pdo

--with-mysql=/usr/local/mysql/

--with-mysqli=/usr/local/mysql/bin/mysql_config

--with-pdo-mysql

--with-zlib=/opt/FriendlyARM/toolchain/4.5.1/arm-none-linux-gnueabi

--without-iconv

其中--with-mysql是arm版的mysql的安装目录

--with-mysqli是mysql的一个配置文件的文件名

--with-zlib就是arm的交叉编译工具的目录

过程中我遇到个问题,就是无论怎么设置都找不到mysql_config文件,但查到在相关的目录下该文件确实存在。后来在王上查了资料,说是需要将mysql_config文件复制到/usr/bin目录下才行,于是照做,竟然通过了。幸运啊!

(2) #make

这个没啥说的,编译时间有些长,耐心等待吧。

(3)#make install

这里会出现问题,说是不能验证php程序。这很正常,编译完成的是arm版的程序自然在PC机上运行不过,这是之前编译的程序就派上用处了。先将mysql/sapi/cli/php程序改名为php_bak,再将mysql-pc/sapi/cli/php程序复制到/mysql/sapi/cli目录下,再执行#make install。成功安装。

(3) 将php_bak程序复制到php的安装目录,改名为php覆盖掉之前的程序。再将PHP源码包中php-5.2.9.ini-dist文件复制到/usr/local/php/lib下并改名为php.ini。

(4) 因为php和php-cgi两个程序稍微有点大,于是用arm-linux-strip把bin目录下的php和php-cgi进行strip。键入命令:

#arm-linux-strip php

#arm-linux-strip php-cgi

再看一下大小,是不是小多啦!

(5) 现在可以将php文件拷贝到arm板上的/usr/local目录下用了。不过要想让php动态调用mysql还需要编译个插件

(6)最后修改arm板上apache的配置文件httpd.conf。添加如下语句:

DirectoryIndex index.php

DirectoryIndex index.php3

DirectoryIndex index.phtml

ScriptAlias /php5/ "/usr/local/php-arm/bin/"

# 注意"/usr/local/php-arm/bin/" 中最后一个"/"不可少

AllowOverride None

Options None

Order allow,deny

Allow from all

AddType application/x-httpd-php .php3

AddType application/x-httpd-php .php

AddType application/x-httpd-php .phtml

Action application/x-httpd-php "/php5/php-cgi"

四、再次编译mySQL以支持PHP动态调用:

进入Mysql带的扩展库的目录,运行:

#/usr/local/php/bin/phpize

#./configure--with-php-config=/usr/local/php/bin/php-config

#make

#makeinstall

然后在会有这个文件

usr/local/php/lib/php/extensions/debug-non-zts-20060613/pdo_mysql.so

增加到配置文件php.ini里:

# viphp.ini

在最后加入

extension=pdo_mysql.so

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值