首页
人工智能
编程教程
编程导航
编程百科
编程问答
编程博文
编程实例
硬件设备
网络运营
软件教程
移动数码
办公软件
操作系统
网络运维
SQLITE3在tiny6410上的移植
Sqlite
2020-07-12
下载
sql
ite最新版本3.7.9 http://www.
sql
ite.org/download.html 源码包:
sql
ite-autoconf-3071400.tar.gz 解压源码包到/opt目录下: #tar xvzf
sql
ite-autoconf-3071400.tar.gz –C /opt/ 建立make install目录: # mkdir /opt/build 进入解压出得
文件
夹中: # cd /opt/
sql
ite-autoconf-3070900 执行con
fig
ure命令:
生成
Makefile
文件
: # ./con
fig
ure –-host=arm-linux –prefix=/opt/build
生成
Makefile
文件
后,执行make命令:: # make #make install 完成之后可以发现,之前所建目录/opt/build下
生成
bin include lib share四个目录。主要用到的
文件
有./bin/
sqlite3
./include/
sqlite3
.h以及 ./lib/下的库
文件
。 bin
文件
夹下的
sqlite3
是
sql
ite可执行应用程序下载到板子Linux系统下的/bin目录或者/usr/bin目录下并
添加
文件
可执行权限。在板子Linux系统命令行下执行:# chmod +x
sqlite3
进入
sql
ite命令行,可以实现对
数据库
的管理。 [root@FriendlyARM plg]#
sqlite3
sql
ite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter
sql
statements terminated with a ";"
sql
ite> ./include/
sqlite3
.h定义了
sql
ite的API接口会在有关
sql
ite的c
文件
交叉编译时用到。 ./lib/
文件
夹下是有关
sql
ite的静态
链接
库和动态
链接
库 # ls lib/ lib
sqlite3
.a lib
sqlite3
.la lib
sqlite3
.so
lib
sqlite3
.so
.0 lib
sqlite3
.so
.0.8.6 pkgcon
fig
其中lib
sqlite3
.so
和lib
sqlite3
.so
.0都是lib
sqlite3
.so
.0.8.6的软
链接
文件
。真正需要下载到板子目录/lib下的动态库是lib
sqlite3
.so
.0.8.6。下载到板子后还需对它建立软
链接
文件
因为可执行程序寻找的动态
链接
库的名字为lib
sqlite3
.so
.0。 # ln -s /lib/lib
sqlite3
.so
.0.8.6 /lib/lib
sqlite3
.so
.0 到此,
sql
ite的移植工作已经完成,下面进行测试。 测试程序test_
sql
ite.c如下: 1. #include <st
dio
.h> 2. #include <
sqlite3
.h> 3. 4. static int callback(void *NotUsed,int argc,char **argv,char **azColName) 5. { 6. int i; 7. for(i=0; i<argc; i++) 8. { 9. printf("
%s
=
%s
\n",azColName[i],argv[i] ? argv[i] : "NULL"); 10. } 11. printf("\n"); 12. return 0; 13. } 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!=
sql
ITE_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_
sql
ite.c -I /opt/build/include/ -L /opt/build/lib/ -l
sqlite3
注:-I制定优先
搜索
头
文件
路径: -L制定编译的时候,优先
搜索
库的路径。 下载到板子上执行: [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 test test_
sql
ite.c -I /opt/build/include/ -L /opt/build/lib/ -static -l
sqlite3
/opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `unixDlSym': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:29926: undefined reference to `dlsym' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `pthreadMutexLeave': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17807: undefined reference to `pthread_mutex_unlock' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `pthreadMutexTry': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17769: undefined reference to `pthread_mutex_trylock' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `pthreadMutexEnter': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17723: undefined reference to `pthread_mutex_lock' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `pthreadMutexFree': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17680: undefined reference to `pthread_mutex_destroy' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `pthreadMutexAlloc': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17654: undefined reference to `pthread_mutex_init' /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17637: undefined reference to `pthread_mutexattr_init' /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17638: undefined reference to `pthread_mutexattr_settype' /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17639: undefined reference to `pthread_mutex_init' /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:17640: undefined reference to `pthread_mutexattr_destroy' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `unixDlClose': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:29930: undefined reference to `dlclose' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `unixDlError': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:29899: undefined reference to `dlerror' /opt/build/lib//lib
sqlite3
.a(
sqlite3
.o): In function `unixDlOpen': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:29885: undefined reference to `dlopen' collect2: ld returned 1 exit status
错误
信息中
提示
有线程接口
函数
,需要线程的动态
链接
库,要加入-lpthread选项。在网上查找按照网友提供的资料dl
open()
,dlclose(),dlerror(),dlsym()
函数
在头
文件
#include <dlfcn.h>中,同样需要
添加
编译选项-ldl。 # arm-linux-gcc -o test test.c -I /opt/build/include/ -L /opt/build/lib -static -l
sqlite3
-lpthread –ldl 编译成功:但有
一个
warning,没有
解决
,暂时没有发现这个警告对程序影响。 /opt/build/lib/lib
sqlite3
.a(
sqlite3
.o): In function `unixDlOpen': /opt/
sql
ite-autoconf-3070900/
sqlite3
.c:29885: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 静态编译与动态编译的差别在于:可执行
文件
较大,即使板子上没有移植动态
链接
库lib
sqlite3
.so
.0,程序也同样可以执行。
相关文章
Java 嵌入数据处理引擎:SQLite 的挑战者 esProc SPL
SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
五、使用Python操作数据库
使用Python操作内置数据库SQLite以及MySQL数据库。
AndroidStudio-实现登录界面数据存储在SQLite
登陆界面
一文教会你导出微信聊天记录
破解微信数据库密码,用python导出微信聊天记录
UnitySqlite持久化数据
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
Android用户登陆与注册功能的简单实现SQLite
安卓开发,利用SQLite实现登陆注册功能