移植Sqlite到ARM板
2015-12-28 15:58
190 查看
SQlite是一个开源的数据库软件,特性和性能就不介绍了,网上大量资源。
PC端是Ubuntu 14.03。
ARM的平台是OMAPL138。
获取源代码的方式,官方网站提供了最新的源码包下载,本次移植所使用的版本是3.9.2
官网下载地址:http://www.sqlite.org/download.html
选择Source code栏目下面的sqlite-autoconf-3090200.tar.gz
下面说明我的移植过程:
下载好后将源码包放在主目录下
1、解压源码包
$tar -zxvf sqlite-autoconf-3090200.tar.gz
2、创建临时目录
实验性的东西最好先临时创建文件夹:
$mkdir sqlite
$cd sqlite
$mkdir arm pc
在主目录下将解压出来的源码包文件分别拷贝到上sqlite下的两个文件夹下。
3、编译PC端的版本
$cd pc
$./configure --prefix=/usr/local
$make
$sudo make install
上面配置命令中,--prefix选项后面的是编译后的安装路径,这个路径是可以自定义的,但是这个路径一定要指定为绝对路径。
安装完成后,产生的文件会存放在前面--prefix选项指定的目录,bin下面存放着可执行程序sqlite3,lib下面存放着库文件,include目录下放的是头文件,编写应用程序的时候需要指定这个目录。
4、检验安装
完成前面3步后,就可以在PC上使用sqlite的命令行工具了
$sqlite3 -version
$3.9.2 2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328
或者直接运行,进入操作模式
$sqlite3
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
使用.quit或者ctrl+d的组合键方式可以退出。
5、编译在ARM端上的版本
$cd arm
$./configure CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi --prefix=/home/sunyu/sqlite/arm/sqlite-autoconf-3090200/taget
$make
$make install
CC指定的交叉编译工具,--host指定了平台,--prefix指定在sqlite-autoconf-3090200的taget目录下(这个目录是新建的($mkdir
taget).
install完成后,会在taget目录下生成所需的库文件和头文件以及应用程序。
6、精简文件大小
经过上面的编译后,已经能将生成的文件放到开发板上使用的了,不过为了节省内存空间,可以对文件做一些处理,减小文件的大小。
$arm-none-linux-gnueabi-strip ./taget/lib/libsqlite3.so.0.8.6
$arm-none-linux-gnueabi-strip ./taget/lib/libsqlite3.a
$arm-none-linux-gnueabi-strip ./taget/bin/sqlite3
strip后:
sqlite3由2.4M降为720K
libsqlite3.so.0.8.6由2.4M降为694K
libsqlite3.a由2.7M降为652K
降的相当的多啊,不过削减了哪些东西还没验证,不清楚,这个先放着。
7、移植
接下来将交叉编译所安装的文件放到ARM板上,存放的目录就可以自己指定,可执行文件sqlite3是命令行工具,不依赖编译所生成的库,所以先单独放sqlite3到ARM板上。
我是通过tftp的方式将sqlite3下载到开发板上的所以下载好后,还需要赋予权限
#tftp -g -l sqlite3 -r sqlite3 192.168.1.249
sqlite3 100% |*******************************| 717k 0:00:00 ETA
#chmod +x sqlite3
测试运行方法和在PC上的一样。
#./sqlite -version
3.9.2 2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328
或者
#./sqlite
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
8、测试程序
安装好后,测试下当前安装的sqlite是否能用,所以编写一段代码来测试一下,测试文件名为sqlite_test.c
$gcc sqlite_test.c -o test.out -lsqlite3
编译时需指定sqlite3的库。正常编译通过的话,会产生可执行文件test.out,执行该文件后会在当前目录下产生一个sq.db的数据库文件,并可以看到打印提示。
$./test.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
10、ARM端的测试
为了方便,我将第5步生成头文件和库文件复制到了PC端的/usr/local_arm下面去了,这样编译指定库与头文件就非常方便了,不用一串超长的命令了(还是很长。。)
$arm-none-linux-gnueabi-gcc sqlite_test.c -o test.out -lsqlite3 -L/usr/local_arm/lib -I/usr/local/include
上面的命令通过-L指定库文件的路径,通过-I指定头文件的路径。将编译后得到的test.out放入到ARM开发板上。
这时候,由于库文件还没有放入到ARM开发板上,所以此程序运行不了。
运行此程序会提示缺少libsqlite3.so.0
查看交叉编译得到的文件目录
$ll
drwxrwxr-x 3 sunyu sunyu 4096 12月 28 16:37 ./
drwxrwxr-x 6 sunyu sunyu 4096 12月 28 15:07 ../
-rw-r--r-- 1 sunyu sunyu 667232 12月 28 16:37 libsqlite3.a
-rwxr-xr-x 1 sunyu sunyu 995 12月 28 15:07 libsqlite3.la*
lrwxrwxrwx 1 sunyu sunyu 19 12月 28 15:07 libsqlite3.so -> libsqlite3.so.0.8.6*
lrwxrwxrwx 1 sunyu sunyu 19 12月 28 15:07 libsqlite3.so.0 -> libsqlite3.so.0.8.6*
-rwxr-xr-x 1 sunyu sunyu 710624 12月 28 16:37 libsqlite3.so.0.8.6*
可以看到,libsqlite3.so是libsqlite3.so.0.8.6的一个软链接
所以我们需要是libsqlite3.so.0.8.6,拷贝到ARM开发板的/usr/lib目录下,并建立软链接:
ARM开发板的/usr/lib下
#ln -s libsqlite3.so.0.8.6 libsqlite3.so
这样就可以运行test.out了,结果与PC上的一致。
其他的库暂时还没发现什么功能与之有关,所以暂时没动,在以后编译程序时用到就可以按照这种方式去放。
移植工作暂告一段落,以后就是学习使用SQlite这个数据库了。
PC端是Ubuntu 14.03。
ARM的平台是OMAPL138。
获取源代码的方式,官方网站提供了最新的源码包下载,本次移植所使用的版本是3.9.2
官网下载地址:http://www.sqlite.org/download.html
选择Source code栏目下面的sqlite-autoconf-3090200.tar.gz
下面说明我的移植过程:
下载好后将源码包放在主目录下
1、解压源码包
$tar -zxvf sqlite-autoconf-3090200.tar.gz
2、创建临时目录
实验性的东西最好先临时创建文件夹:
$mkdir sqlite
$cd sqlite
$mkdir arm pc
在主目录下将解压出来的源码包文件分别拷贝到上sqlite下的两个文件夹下。
3、编译PC端的版本
$cd pc
$./configure --prefix=/usr/local
$make
$sudo make install
上面配置命令中,--prefix选项后面的是编译后的安装路径,这个路径是可以自定义的,但是这个路径一定要指定为绝对路径。
安装完成后,产生的文件会存放在前面--prefix选项指定的目录,bin下面存放着可执行程序sqlite3,lib下面存放着库文件,include目录下放的是头文件,编写应用程序的时候需要指定这个目录。
4、检验安装
完成前面3步后,就可以在PC上使用sqlite的命令行工具了
$sqlite3 -version
$3.9.2 2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328
或者直接运行,进入操作模式
$sqlite3
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
使用.quit或者ctrl+d的组合键方式可以退出。
5、编译在ARM端上的版本
$cd arm
$./configure CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi --prefix=/home/sunyu/sqlite/arm/sqlite-autoconf-3090200/taget
$make
$make install
CC指定的交叉编译工具,--host指定了平台,--prefix指定在sqlite-autoconf-3090200的taget目录下(这个目录是新建的($mkdir
taget).
install完成后,会在taget目录下生成所需的库文件和头文件以及应用程序。
6、精简文件大小
经过上面的编译后,已经能将生成的文件放到开发板上使用的了,不过为了节省内存空间,可以对文件做一些处理,减小文件的大小。
$arm-none-linux-gnueabi-strip ./taget/lib/libsqlite3.so.0.8.6
$arm-none-linux-gnueabi-strip ./taget/lib/libsqlite3.a
$arm-none-linux-gnueabi-strip ./taget/bin/sqlite3
strip后:
sqlite3由2.4M降为720K
libsqlite3.so.0.8.6由2.4M降为694K
libsqlite3.a由2.7M降为652K
降的相当的多啊,不过削减了哪些东西还没验证,不清楚,这个先放着。
7、移植
接下来将交叉编译所安装的文件放到ARM板上,存放的目录就可以自己指定,可执行文件sqlite3是命令行工具,不依赖编译所生成的库,所以先单独放sqlite3到ARM板上。
我是通过tftp的方式将sqlite3下载到开发板上的所以下载好后,还需要赋予权限
#tftp -g -l sqlite3 -r sqlite3 192.168.1.249
sqlite3 100% |*******************************| 717k 0:00:00 ETA
#chmod +x sqlite3
测试运行方法和在PC上的一样。
#./sqlite -version
3.9.2 2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328
或者
#./sqlite
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
8、测试程序
安装好后,测试下当前安装的sqlite是否能用,所以编写一段代码来测试一下,测试文件名为sqlite_test.c
<span style="font-size:18px;"><span style="font-size:14px;">#include <stdio.h> #include <sqlite3.h> int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 rc = sqlite3_open("sq.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 0; } else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n"); sqlite3_close(db); //关闭数据库 return 0; }</span></span>9、PC端的测试
$gcc sqlite_test.c -o test.out -lsqlite3
编译时需指定sqlite3的库。正常编译通过的话,会产生可执行文件test.out,执行该文件后会在当前目录下产生一个sq.db的数据库文件,并可以看到打印提示。
$./test.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
10、ARM端的测试
为了方便,我将第5步生成头文件和库文件复制到了PC端的/usr/local_arm下面去了,这样编译指定库与头文件就非常方便了,不用一串超长的命令了(还是很长。。)
$arm-none-linux-gnueabi-gcc sqlite_test.c -o test.out -lsqlite3 -L/usr/local_arm/lib -I/usr/local/include
上面的命令通过-L指定库文件的路径,通过-I指定头文件的路径。将编译后得到的test.out放入到ARM开发板上。
这时候,由于库文件还没有放入到ARM开发板上,所以此程序运行不了。
运行此程序会提示缺少libsqlite3.so.0
查看交叉编译得到的文件目录
$ll
drwxrwxr-x 3 sunyu sunyu 4096 12月 28 16:37 ./
drwxrwxr-x 6 sunyu sunyu 4096 12月 28 15:07 ../
-rw-r--r-- 1 sunyu sunyu 667232 12月 28 16:37 libsqlite3.a
-rwxr-xr-x 1 sunyu sunyu 995 12月 28 15:07 libsqlite3.la*
lrwxrwxrwx 1 sunyu sunyu 19 12月 28 15:07 libsqlite3.so -> libsqlite3.so.0.8.6*
lrwxrwxrwx 1 sunyu sunyu 19 12月 28 15:07 libsqlite3.so.0 -> libsqlite3.so.0.8.6*
-rwxr-xr-x 1 sunyu sunyu 710624 12月 28 16:37 libsqlite3.so.0.8.6*
可以看到,libsqlite3.so是libsqlite3.so.0.8.6的一个软链接
所以我们需要是libsqlite3.so.0.8.6,拷贝到ARM开发板的/usr/lib目录下,并建立软链接:
ARM开发板的/usr/lib下
#ln -s libsqlite3.so.0.8.6 libsqlite3.so
这样就可以运行test.out了,结果与PC上的一致。
其他的库暂时还没发现什么功能与之有关,所以暂时没动,在以后编译程序时用到就可以按照这种方式去放。
移植工作暂告一段落,以后就是学习使用SQlite这个数据库了。
相关文章推荐
- Mysql 命令
- 11.19,控制台连接数据库
- 数据库+maven
- MySQL explain执行计划解读
- Redis的简单介绍及在Windows下环境搭建
- MySql中LongText字段对应Hibernate映射文件的设置(转)
- SQL获取每月、每季度、每年的最后一天记录
- mysql sp
- 扣丁学堂——SQLite
- oracle 取当前时间的上月的月末时间
- ms sql study note
- 数据库字段太长,做唯一性约束
- redis 的性能及高版本配置
- DOS执行mysql数据库备份及压缩
- oracle 锁表、解锁的语句
- 数据库锁表的分析与解决
- 使用show status信息分析SQL性能
- 动软代码生成器生成数据库文档
- SQL与java数据库编程汇总(动态更新)
- sqlserver游标概念与实例全面解说