logo资料库

Arm移植php+apache+mysql过程.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
想要在 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'<' has no left operand 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 make[4]: Entering directory`/home/zhaowg/mysql-pc/mysql-test' INSTALL_TO_DIR="/usr/local/mysql/mysql-test"install_test_files 一段时间,不要以为出错了,耐心等一会! 二、编译 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 --prefix=/opt/FriendlyARM/toolchain/4.5.1/arm-none-linux-gnueabi #make #make install (安装到/usr/local/arm/4.5.1/arm-linux 下的原因同上) --host=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
分享到:
收藏