在EasyARM-imx283上移植 sqlite 3.8.4.3
第一:开发环境
zlg ubuntu-12.04 + EasyARM-iMX283+arm-linux-gcc4.4.4
第二:下载sqlite
下载 sqlite 最新版本:3.8.4.3 http://www.sqlite.org/download.html
源码包:sqlite-autoconf-3080403.tar
第三:移植步骤
1. 解压源码包到/opt 目录下:
fab@ubuntu:~$ sudo tar zxvfsqlite-autoconf-3080403.tar.gz -C /opt
2. 建立 make install 目录
fab@ubuntu:~$ sudo mkdir /opt/build
3. 进入解压出得文件夹中
fab@ubuntu:~$ sudo cd /opt/sqlite-autoconf-3080403
4. 执行 configure 命令,生成 Makefile 文件:
fab@ubuntu:~$./configure --host=arm-linux-prefix=/opt/build
5. 生成 Makefile 文件后,执行 make 命令:
fab@ubuntu:~$ make
/bin/sh./libtool --tag=CC --mode=compile arm-linux-gcc -DPA
CKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\"-DPACKAGE_VERSIO
N=\"3.8.4.3\"-DPACKAGE_STRING=\"sqlite\3.8.4.3\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\"-DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\"-DVERSION=\"3.8.4.3\"-D_FILE_OFFSET_BITS=64 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1-DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1-DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1-DHAVE_DLFCN_H=1 -DHAVE_FDATASY
NC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1-DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1-DHAVE_STRERROR_R=1-DHAVE_POSIX_FALLOCATE=1 -I.@am__isrc@ -D_REENTRANT=1 -DsqlITE_THREADSAFE=1-DsqlITE_ENABLE_FTS3 -DsqlITE_ENABLE_RTREE -g -O2 -MT sqlite3.lo -MD -MP -MF.deps/sqlite3.Tpo -c -o sqlite3.lo sqlite3.c
mkdir .libsarm-linux-gcc-DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\"-DPACKAGE_VERSION=\"3.8.4.3\" "-DPACKAGE_STRING=\"sqlite 3.8.4.3\"
"-DPACKAGE_BUGREPORT=\"http://www.sqlite.org\"-DPACKAGE_URL=\"\"
-DPACKAGE=\"sqlite\"-DVERSION=\"3.8.4.3\" -D_FILE_OFFSET_BITS=64
-DSTDC_HEADERS=1-DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_S
TDLIB_H=1-DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1
-DHAVE_INTTYPES_H=1-DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLF
CN_H=1-DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -D
HAVE_GMTIME_R=1-DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1-DHAVE_POSIX_FALLOCATE=1-I.@am__isrc@-D_REENTRANT=1-DsqlITE_THREADSAFE=1-DsqlITE_ENABLE_FTS3-DsqlITE_ENABLE_RTREE-g -O2 -MT sqlite3.lo -MD -MP -MF .deps/sqlite3.Tpo -c sqlite3.c -fPIC -DP
IC-o .libs/sqlite3.oarm-none-linux-gnueabi-gcc: 3.7.9": No such file ordirectory
<command-line>:warning: missing terminating " character
查找原因,与前文的 make 信息-DPACKAGE_STRING=\"sqlite\3.8.4.3\"相
比较,发现是因为"-DPACKAGE_STRING=\"sqlite3.8.4.3\""字符之间空格没有转
义字符\。
fab@ubuntu:~$vim Makefile或gedit Makefile
在136行找到-DPACKAGE_STRING=\"sqlite\ 3.8.4.3\"改为-DPACKAGE_STRING=\"sqlite_3.8.4.3\",保存退出。重新执行 make 指令,建议在 make 之前先 make clean。
7. 等一段时间后,make 成功,执行命令:
fab@ubuntu:~$make install
8. 完成之后可以发现,之前所建目录/opt/build 下生成bin, include ,lib,share 四个目录。主要用到的文件有./bin/sqlite3,./include/sqlite3.h以及./lib/下的库文件。bin 文件夹下的 sqlite3,是 sqlite 可执行应用程序,下载到板子 Linux系统下的/bin 目录或者/usr/bin 目录下,并添加文件可执行权限。在板子Linux 系统命令行下执行:
root@freescale / chmod +x sqlite3
9. /opt/build 下文件介绍
./include/sqlite3.h定义了 sqlite 的 API 接口,会在有关 sqlite
的 c 文件交叉编译时用到。./lib/文件夹下是有关 sqlite 的静态链接库和动态链接库,lib/libsqlite3.alibsqlite3.la libsqlite3.so libsqlite3.so.0
libsqlite3.so.0.8.6pkgconfig libsqlite3.so和 libsqlite3.so.0 都是 libsqlite3.so.0.8.6的软链接文件。
9. 下载lib文件夹下的库到ARM板上
A:将lib目录下的libsqlite3.so、libsqlite3.so.0、 libsqlite3.so.0.8.6下载到开发板的 lib目录下,将sqlite3下载到 bin 目录下;
B:真正需要下载到板子目录/lib 下的动态库是libsqlite3.so.0.8.6。下载到板子后,还需对它建立软链接文件,因为可执行程序寻找的动态链接库的名字为 libsqlite3.so.0。
[root@FriendlyARMplg]# ln-s /lib/libsqlite3.so.0.8.6 /lib/libsqlite3.so
我所采用的是A方法,这样根据具体情况而定。
10. 到此,sqlite 的移植工作已经完成。
第四:测试数据库:
Voidtestdb(void)
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
rc = sqlite3_open(test.db,&db);
if( rc )
{
sqlite3_close(db);
exit(1);
}
else {
printf("You have opened a sqlite3database named test.db successfully!\n");
}
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(IDINTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,TimeVARCHAR(12),SensorParameter REAL);" ;
sqlite3_exec( db,sql,&zErrMsg);
//插入数据
sql = "INSERT INTO \"SensorData\"VALUES(NULL,1,'200605011206',18.9 );" ;
sqlite3_exec( db,&zErrMsg);
sql = "INSERT INTO\"SensorData\" VALUES(NULL,'200605011306',16.4 );" ;
sqlite3_exec( db,&zErrMsg);
int nrow = 0,ncolumn = 0;
char **azResult; //二维数组存放结果
//查询数据
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db,&azResult,&nrow,&ncolumn,&zErrMsg );
int i = 0 ;
printf( "row:%d column=%d \n",nrow,ncolumn );
printf( "\nThe result of querying is :\n" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s\n",i,azResult[i] );
//释放掉 azResult 的内存空间
sqlite3_free_table( azResult );
sqlite3_close(db);
}
将编译好的工程下载到开发板上,运行如下图所示: