搭建QT+Sqlite3嵌入式开发环境

前言

原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱:[email protected]

之前我们已经成功搭建了QT嵌入式开发环境(具体步骤见http://blog.csdn.net/maxwell_nc/article/details/44002745),接下来我们在这个基础上搭建Sqlite3嵌入式数据库开发环境。由于之前编译QT没有使用内嵌数据库的功能,这里也不再重复那麻烦的编译过程,QT也可以通过调用Sqlite3的API来处理数据库,而且比较简单。


下载源码

首先上Sqlite官网(http://www.sqlite.org/)下载源码sqlite-autoconf-3080704.tar 这里我用的是最新的3.8.7.4,(发博文的时候已经更新到3.8.8.3)我也试过移植3.7.17,发现差别不大,效率比新版低,API没有变化,所以这里的只要是3.x的版本差别应该也不大。


编译X86版本

这里编译SQLITE3比QT简单快得多,只需要进入目录配置安装即可,基本不会出错。这个版本用于PC开发和运行所需要的库。
配置命令
./configure --prefix=/opt/sqlite_x86
安装编译
make && make install


编译ARM版本

这个版本用于ARM开发板调用动态链接库,解压另一份源码,进入目录配置:
./configure CC=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc --host=arm-linux --prefix=/opt/sqlite_arm(要注意arm-linux-gcc编译器的路径)
安装编译:make && make install


移植Sqlite3到开发板

首先移植不是必须的,如果你编写的程序采用静态链接封装sqlite的话就不需要在板上移植sqlite,如果你采用动态链接的编译方式,你就需要移植sqlite到开发板,我两种编译方式下面都会说明。

移植过程很简单,把安装生成的目录/opt/sqlite_arm复制到开发板的对应目录,设置库的路径就可以了,我这里用nfs下载(配置方法http://blog.csdn.net/maxwell_nc/article/details/44064041)到板上。

有两种方式配置库路径:
一种是永久配置,首先vi /etc/ld.so.conf 添加一行 /opt/sqlite_arm/lib 保存退出,再执行ldconfig生效。
另一种是修改LD_LIBRARY_PATH这种方法必须修改/bin/setqt4env,(不能直接使用export命令,不然的话会被覆盖导致系统无法识别路径)直接修改/bin/setqt4env里的LD_LIBRARY_PATH就可以了。


动态编译

我们新建一个测试程序,使用sqlite编程,只需要在项目上加入:
(这里我从网上找了一个程序http://download.csdn.net/detail/pengrui18/4543238,非常感谢这位作者,我们使用这个程序做例子)

SQLITE_PATH=/opt/sqlite_x86 # X11和qvfb用X86版sqlite,arm选择arm版sqlite
DEPENDPATH += $$SQLITE_PATH/include
INCLUDEPATH += $$SQLITE_PATH/include
LIBS += -L$$SQLITE_PATH/lib
LIBS += -lsqlite3

静态编译

我们新建一个测试程序,使用sqlite编程,
在项目源码目录下拷贝对应版本的sqlite 文件 /sqlite_arm/lib/libsqlite3.a/sqlite_arm /include/sqlite3.h (这里我们用arm版本)
需要在项目上加入:LIBS += -L/home/xman/PhoneTestPro/source \-lsqlite3
可以看出,静态编译这么做不方便切换调试。
这里要注意,数据库调用使用相对路径和绝对路径的问题,相对路径是相对于运行路径而不是文件所在路径或者源码路径,移植项目到开发板必须把数据库移植到板上,否则会出现错误。


测试效果

下面是测试效果,
X11版的编译结果,使用动态编译:
搭建QT+Sqlite3嵌入式开发环境_第1张图片

QVFB版的编译结果,使用动态编译:
搭建QT+Sqlite3嵌入式开发环境_第2张图片

arm版的编译结果,使用静态编译:
我运行时候加上参数 -qws -font fixed(改变字体、 防止越界问题,也可以选择其他字体)
搭建QT+Sqlite3嵌入式开发环境_第3张图片

你可能感兴趣的:(嵌入式开发)