在mini2440上的移植sqlite3(成功)
开发环境:Fedora9 开发板:友善之臂mini2440,内核版本Linux FriendlyARM 2.6.32.2-FriendlyARM #1 Fri Mar 4 17:57:58 CST 2011 armv4tl unknown 交叉编译环境:arm-linux-gcc4.4.3(补充说明:之前安装没成功,因为是arm-linux-gcc4.5.1,编译的可执行程序在mini2440上运行属于Illegal Instruction,连基本的hello.c都不能运行) 下载sqlite最新版本:http://www.sqlite.org/download.html 源码包:sqlite-autoconf-3071401.tar 解压源码包到/opt目录下: # tar xvzf sqlite-autoconf-3070900.tar.gz –C /opt/ 建立make install目录 # mkdir /opt/build 进入解压出得文件夹中: # cd /opt/sqlite-autoconf-3070900 (网上说这一步有错误,需要修改Makefile文件,但是我运行没有错误,所以就没修改。) 等一段时间后,make成功。执行命令:
主要用到的文件 (注意:后来经过多次移植发现只需要移植两个文件:sqlite3和libsqlite3.so.0,前一个放到开发板/bin目录下,并chmod +x sqlite3;后一个直接下载到/lib目录) (1)移植可执行文件bin文件夹下的sqlite3,是sqlite可执行应用程序,下载到板子Linux (2)移植头文件./include/sqlite3.h定义了sqlite的API接口,会在有关sqlite的c文件交叉编译时用到。 (3)移植库文件./lib/文件夹下是有关sqlite的静态链接库和动态链接库# ls lib/ libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig libsqlite3.so和libsqlite3.so.0都是libsqlite3.so.0.8.6 的软链接文件。真正需要下载到板子目录/lib下的动态库是 libsqlite3.so.0.8.6。下载到板子后,还需对它建立软链接文件,因为可 执行程序寻找的动态链接库的名字为libsqlite3.so.0。 [root@FriendlyARM plg]# ln -s /lib/libsqlite3.so.0.8.6 /lib/libsqlite3.so.0 到此,sqlite的移植工作已经完成!下面进行测试。 第一种方法是直接输入sqlite3命令: [root@FriendlyARM plg]# sqlite3 说明配置成功了。 第二种方法: 测试程序test_sqlite.c如下: } 动态编译: 注:-I制定优先搜索头文件路径,-L制定编译的时候,优先搜索库的 [root@FriendlyARM plg]# ./test xyz.db "create table tbl0(name varchar(10),number smallint);" [root@FriendlyARM plg]# ./test xyz.db "select * from tbl0;" 截图如下: 下面进行静态编译: # arm-linux-gcc -o test1 test.c -I /opt/build/include/ -L /opt/build/lib -static -lsqlite3 -lpthread –ldl 也成功了。 至此说明移植成功了,下面就是学习如何使用sqlite3了。 附件:测试程序注释 test_sqlite.c #include <stdio.h> int main(int argc,char **argv) { sqlite3 *db; /*sqlite里最常用的是sqlite3 *类型*/ char *zErrMsg = 0; int rc; if( argc!=3 ) /*可执行程序有三个参数*/ { fprintf(stderr,argv[0]); } rc = sqlite3_open(argv[1],&db); /*main()第一个参数是可执行文件名,main()第二个参数是打开或创建的数据库文件名*/ if( rc ) { fprintf(stderr,sqlite3_errmsg(db)); sqlite3_close(db); /*打开或创建数据库失败就关闭数据库*/ } rc = sqlite3_exec(db,&zErrMsg); /*main()第三个参数argv[2]传入到上面这条执行sql语句,查询数据库*/ if( rc!=SQLITE_OK ) /*SQLITE_OK表示操作正常*/ { fprintf(stderr,zErrMsg); } sqlite3_close(db);/*关闭数据库*/ return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |