linux内核数据库sqlite3的移植,在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-autoconf-3071401.tar

解压源码包到/opt目录下:

# tar xvzf sqlite-autoconf-3070900.tar.gz –C /opt/

建立make install目录

# mkdir /opt/build

进入解压出得文件夹中:

# cd /opt/sqlite-autoconf-3070900

执行configure命令,生成Makefile文件:

# ./configure -host=arm-linux -prefix=/opt/build

生成Makefile文件后,执行make命令:

# make

(网上说这一步有错误,需要修改Makefile文件,但是我运行没有错误,所以就没修改。)

等一段时间后,make成功。执行命令:

#make install

完成之后可以发现,之前所建目录/opt/build下生成

bin include lib share四个目录。(/opt/build/目录就是arm版本的sqlite3库文件位置)

主要用到的文件

有./bin/sqlite3,./include/sqlite3.h以及./lib/下的库文件。

(注意:后来经过多次移植发现只需要移植两个文件:sqlite3和libsqlite3.so.0,前一个放到开发板/bin目录下,并chmod +x sqlite3;后一个直接下载到/lib目录)

(1)移植可执行文件

bin文件夹下的sqlite3,是sqlite可执行应用程序,下载到板子Linux

系统下的/bin目录或者/usr/bin目录下,并添加文件可执行权限。在板子

Linux系统命令行下执行:

[root@FriendlyARM bin]# chmod +x sqlite3

(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

sqlite version 3.7.9 2011-11-01 00:52:41

Enter ".help" for instructions

Enter sql statements terminated with a ";"

sqlite>

说明配置成功了。

第二种方法:

测试程序test_sqlite.c如下:

1. #include

2. #include

3.

4. static int callback(void *NotUsed,int argc,char **argv,char **azColName)

5. {

6. int i;

7. for(i=0; i

8. {

9. printf("%s = %s\n",azColName[i],argv[i] ? argv[i] : "NULL");

10. }

11. printf("\n");

12. return 0;

}

14.

15. int main(int argc,char **argv)

16. {

17. sqlite3 *db;

18. char *zErrMsg = 0;

19. int rc;

20. if( argc!=3 )

21. {

22. fprintf(stderr,"Usage: %s DATABASE sql-STATEMENT\n",argv[0]);

23. }

24. rc = sqlite3_open(argv[1],&db);

25. if( rc )

26. {

27. fprintf(stderr,"Can't open database: %s\n",sqlite3_errmsg(db));

28. sqlite3_close(db);

29. }

30. rc = sqlite3_exec(db,argv[2],callback,&zErrMsg);

31. if( rc!=sqlITE_OK )

32. {

33. fprintf(stderr,"sql error: %s\n",zErrMsg);

34. }

35. sqlite3_close(db);

36. return 0;

37. }

动态编译:

# arm-linux-gcc -o test test_sqlite.c -I /opt/build/include/ -L /opt/build/lib/ -lsqlite3

注:-I制定优先搜索头文件路径,-L制定编译的时候,优先搜索库的

路径。

下载到板子上执行:(也要给test添加执行权限喔#chmod +x test)

[root@FriendlyARM plg]# ./test xyz.db "create table tbl0(name varchar(10),number smallint);"

[root@FriendlyARM plg]# ./test xyz.db "insert into tbl0 values('cyc',1);"

[root@FriendlyARM plg]# ./test xyz.db "insert into tbl0 values('dzy',2);"

[root@FriendlyARM plg]# ./test xyz.db "select * from tbl0;"

name = cyc

number = 1

name = dzy

number = 2

测试成功!

截图如下:

下面进行静态编译:

# arm-linux-gcc -o test1 test.c -I /opt/build/include/ -L /opt/build/lib -static -lsqlite3 -lpthread –ldl

也成功了。

至此说明移植成功了,下面就是学习如何使用sqlite3了。

附件:测试程序注释

test_sqlite.c

#include

#include

/*执行到sqlite3_exec的回调函数*/

static int callback(void *NotUsed,char **azColName)

{

int i;

for(i=0;i

{

printf("%s = %s\n",argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

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; }

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值