移植Sqlite到ARM板

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-3090200taget目录下(这个目录是新建的($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.solibsqlite3.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这个数据库了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值