APPWeb+PHP5+SQLite3在S3C6410上移植
re that the comment is aligned:
dnl [--enable-test Enabletest support])
替换为(dnl在m4文件中起注释作用,即取消上述代码注释)
PHP_ARG_ENABLE(test, whether to enable testsupport,
Make sure that the comment is aligned:
[--enable-test Enabletest support])
注意:不要使用PHP_ARG_WITH,可能会出现问题(提示C函数未定义)
修改php_test.h文件,在PHP_FUNCTION(confirm_mysqlc_compiled);语句下追加下述语句:(PHP_FUNCTION是一个Zend Macro,作用是声明一个C函数,使它在PHP脚本中可用,参数是函数的名字)
PHP_FUNCTION(test);
修改test.c文件,该文件为主程序文件,包含了C代码实现。首先,在zend_function_entrytest_functions函数中增加如下语句:
PHP_FE(test,NULL)
在文件最后,增加函数实现:
PHP_FUNCTION(test){
long int a, b;
long int result;
if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ll", &a, &b) == FAILURE) {
return;
}
result = hello_add(a, b);
RETURN_LONG(result);
}
test就是在PHP脚本中调用的函数名(不需与扩展库名相同),hello_add函数包含在动态库hello.so(需事先准备好)中,Linux下打包.so文件的GCC命令如下:
arm-linux-gcc-fPIC -O -c -o test.o test.c
arm-linux-gcc-shared -o libtest.so test.o
注意:需将生成的动态库置于交叉编译器的Lib目录下,或者放置于当前目录。zend_parse_parameters的功能是从PHP脚本向该函数传递参数(类似于scanf函数),符号“ll”说明参数的数据类型。
重新编译PHP
使用buildconf工具重新生成configure文件,实现包含--enable-test参数选项。
注意:由于使用了外部.so动态库,在执行./configure后,需要修改生成的Makefile文件,在EXTRA_LIBS中增加-ltest选项。
编译完成后,将libs/目录下的libphp5.so(使用strip工具瘦身)拷贝到网关WEB服务器配置目录下的lib子目录中。
最后,必须重新启动AppWeb服务器,使PHP内核加载自定义的扩展库。可以编写一个PHP脚本测试是否调用成功。
echo test(3,9);
?>
数据库SQLite3移植
PHP5.2.27内部SQLite版本为v2,为了获得更多功能支持,采用外部SQLite3版本sqlite3.7.11(通过PDO方式访问)。
1编译SQLite3
首先,在源码目录下建立build/目录,并进入
usrname@ubuntu:~/sqlite3.7.11/sqlite3.6.1/$mkdirbuild
usename@ubuntu:~/sqlite3.7.11/sqlite3.7.11/$cdbuild
usename@ubuntu:~/sqlite3.7.11/ sqlite3.7.11/build/$ ../configure --host=arm-linux--prefix=$(pwd) --disable-tcl
usrname@ubuntu:~/sqlite3.7.11/ sqlite3.7.11/build/$make
usename@ubuntu:~/sqlite3.7.11/ sqlite3.7.11/build/$make install
使用strip工具去除动态库中的调试信息
usename@ubuntu:~/sqlite3.7.11/ sqlite3.7.11/build/$cd lib
usename@ubuntu:~/sqlite3.7.11/ sqlite3.7.11/build/lib/$ arm-linux-strip libsqlite3.so.0.8.6
2 拷贝文件至网关
将lib目录下的文件拷贝到网关/usr/lib目录中,并将/bin目录下的sqlite3拷贝至网关的/usr/bin目录下。
在网关运行sqlite3
[root@urbetter/]# ./usr/bin/sqlite3
正确运行结果如下所示:
3 应用程序编译
应用程序中使用sqlite接口时,首先必须包含相应的头文件“sqlite3.h”,另外,在编译应用程序时必须在编译参数中加入sqlite动态库的路径,如下所示。
$arm-linux-gcc -o test test.c -L/home/username/temp/ sqlite3.7.11/\
sqlite3.7.11/build/lib-I/home/hwwr/ sqlite-3.7.11\
sqlite3.7.11/build/include-Wall
另外,可以将动态库文件放入到所使用的交叉编译链的路径中:
$ sudocp -rP sqlite3.7.11/build/lib/libsqlite3.* /usr/local/\
arm/4.2.2-eabi/lib/
$ sudocp sqlite3.7.11/build/include/* /usr/local/arm/4.2.2-eabi/\
include/
完成上述配置后,编译应用程序时可使用如下编译参数。
$arm-linux-gcc -o test test.c -lsqlite3 –I/ usr/local/arm/4.2.2-eabi/\include
4在PHP中添加sqlite3支持
编译安装完SQLite,将在build目录下生成相关的头文件以及库文件,所以,可以在编译PHP时加入SQLite的路径。使用PDO方式访问sqlite数据库,并且使sqlite采用UTF-8编码方式,具体配置参数如下所示。
--with-sqlite=shared
--enable-sqlite-utf8
--with-pdo-sqlite=/home/hwwr/share/sqlite-3.7.11/
AppWeb服务器移植
AppWeb是一个开源的,针对安全性要求较高的HTTP Web服务器。其主要特点有:
l很小的内存消耗,快速响应,每秒可以处理超过
APPWebPHP5SQLite3S3C641 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)