S3C2410下嵌入式数据库SQLite的移植

深入解析进化算法中的选择与多样性 在计算科学的世界里,最优雅的解决方案往往源于最古老的智慧——大自然。进化算法(Evolutionary Algorithms, EAs)正是这样一种受达尔文自然选择学说启发的强大工具。它们通过模拟“适者生存”的过程,在庞大的可能性海洋中搜寻最优解。。:指的是深入挖掘和优化已知的优质解。这就像在一片已知的沃土上精耕细作,力求获得最高产量。强大的选择压力会促进这一过程。:指的是在整个搜索空间中寻找全新的、可能更优的解。这好比派遣探险队去发现新大陆,充满了未知与机遇。保持种群的多样性是探索的关键。 阅读详情
对SQLite-3.3.8(或者SQLite3.3.12)进行交叉编译,并移植到ARMS3C2410的过程:
    要将SQLite3.3.8(或者SQLite-3.3.12)移植到ARM2410开发板上,除了要有底层操作系统的支持外,还必须要有相应的交叉编译 工具链。由于ARM2410开发板采用的是ARM-Linux作为底层操作系统,因此需要首先安装ARM-Linux工具链。
   1.交叉编译环境建立:
       安装cross-2.95.3.tar.bz2交叉编译工具到/usr/arm-linux目录下。
          
       解压sqlite-3.3.8到/home/sqlite-3.3.8,并创建文件夹
              cd /home/sqlite-3.3.8
              mkdir sqlite-arm-linux
   2、修改/home/sqlite-3.3.8目录下的configure文件的部分内容
      这样可以让configure不去检查你的交叉编译环境,否则会出现如下同样的错误
      checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling,将不能生成Makefile文件.
          20420行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
          20446行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
         cd /home/sqlite-3.3.8/sqlite-arm-linux
         ../configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
         生成了Makefile文件,这些将在make时用到.
    3、将Makefile文件中如下语句
            BCC = arm-linux-gcc -g -O2
            改成:
            BCC = gcc -g -O2
    4、设置交叉编译环境
              export PATH=/usr/arm-linux/arm/2.95.3/arm-linux/bin:$PATH
       
      设置config_TARGET_CC和config_BUILD_CC两个环境变量。config_TARGET_CC是交叉编译器,config_BUILD_CC是主机编译器:
              export config_BUILD_CC=gcc
              export config_TARGET_CC=arm-linux-gcc 
    5、编译并安装
            make && make install
           这里如果不出意外,将不会出现错误,那么库文件已经生成在
           /home/sqlite-3.3.8/sqlite-arm-linux/lib目录下,
           库文件已经生成在为了减小执行文件大小可以用strip处理,去掉其中的调试信息。
           arm-linux-strip libsqlit3.so.0.8.6
           file sqlite3
           sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
       由此可知,此时生成的sqlite文件是还未strip过的。执行命令arm-linux-strip, 去掉其中的调试信息,这样文件将减少很多。(这一步不知道为什么我实现不了,但是不影响软件使用)
           arm-linux-strip sqlite3
      再次用file命令查看sqlite3的信息:
         file sqlite3
         sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped
这就是在开发板上可以直接运行的可执行文件。
    6、移植
      需要注意:
      拷贝是需要加上 –arf选项,因为libsqlite3.so,libsqlite3.so.0是链接到libsqlite3.so.0.8.6的。
       cd /home/sqlite-3.3.8/sqlite-arm-linux/lib
       cp –arf libsqlite3.so libsqlite3.so.0. libsqlite3.so.0.8.6 /usr/qt-sqlite/lib
       cd /home/sqlite-3.3.8/bin
       cp     sqlite3 /usr/qt-sqlite
       然后把sqlite3和lib下的库文件移植到ARM上
    7、在ARM板上运行sqlite
       将qlite3文件下载到你的arm板上, 
       方法很多,你需要根据自己的情况来选择。如ftp,nfs,串口等。 好,开始运行
       chmod +wx sqlite
       [root@51Board var]# ./sqlite3 zieckey.db
       ./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory
       这里是因为刚刚编译时编译的是动态连接库形式的,所有我们还的将库文件下载到ARM板上。
       将 /usr/local/arm-linux/sqlite-arm-linux/lib 目录下所有文件下到ARM板上。 再次运行,
       [root@51Board var]# ./sqlite3 zieckey.db
       ./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory
       还是出错,哦,我们没有设置环境变量,
       假设我们下在库文件在ARM板上的 /usr/qpe/lib/ 目录下,这里设置环境就像下面:
       [root@51Board var]# export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH 好了这样就可以运行了:
       [root@51Board var]# ./sqlite3
       SQLite version 3.3.8
       Enter ".help" for instructions
       sqlite>
       看见
       sqlite>
       提示符号没有?成功了。哈哈!!
       打个“.help”来看看命令先:-)
       sqlite>.help
       好了。现在sqlite已经在arm-linux下跑了起来。如何,感觉很high吧。
 
 
 
下面装载几篇关于sqlite移植的文章,可以参考:
 
sqlite-3.6.1在uclinux上的移植:
1、 下载源码
    $ mkdir -p ~/arm/source/sqlite/
    $ cd ~/arm/source/sqlite/
    $ wget -c http://www.sqlite.org/sqlite-3.6.1.tar.gz
2、 编译安装
    1)编译安装前注意设置交叉编译器的路径,我的是在.bashrc中加上:
    export PATH=$PATH:/usr/local/arm/3.4.1/bin
    2) 记得先安装一下readline库,否则在sqlite3的命令行中不能使用shell的
    history等功能. 其实这只对pc机上的linux有用(只需sudo apt-get install
    libreadline5-dev 就行了),但是对于交叉编译的arm-linux 却没有
    readline库,要移植readline库(我的这一步并不成功,不知道是什么原因):
    $ wget -c ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
    $ tar zxf readline-5.2.tar.gz
    $ cd readline-5.2/
    $ ./configure --host=arm-linux --prefix=$(pwd)/_install
    $ make
    $ make install

    3) 编译安装sqlite
    $ tar zxvf sqlite-3.6.1.tar.gz
    $ cd sqlite-3.6.1/
    $ ./configure --host=arm-linux --prefix=$(pwd)/_install
        --disable-tcl --with-readline-lib=/home/itlanger/
        /arm/source/sqlite/readline-5.2/_install/lib
    $ make
    $ make install
    编译安装成功后,会在_install目录下安装三个目录: bin, include 和 lib
3、安装
    1) strip一下动态库
    $ cd sqlite-3.6.1/_install/lib
    $ arm-linux-strip libsqlite3.so.0.8.6
    这样就将libsqlite3.so.0.8.6从原来的1M多减少到300多k!
    2) 将sqlite-3.6.1/_install/lib/* copy到目标板的/usr/lib目录下
    $ cp -rP _install/lib/* ~/work/ ##这里work是我的nfs目录
   
    3)将sqlite-3.6.1/_install/bin/sqlite3 copy到目标板的/usr/bin目录下
    4)将 readline-5.2/lib/*  copy到目标板子的/usr/lib目录下
   
4、测试
    1) 转到目标板上运行sqlite3, 没问题吧.
    2) 写个小程序测试一下,假设为test.c
    3) 程序的编译:
    $ arm-linux-gcc -o test test.c -L/home/itlanger/arm/source//
      sqlite/sqlite-3.6.1/_install/lib -I/home/itlanger/arm/source/
      slqite/sqlite-3.6.1/_install/include -Wall
    是不是程序的路径太长了? 可以这样:
    $ sudo cp -rP sqlite-3.6.1/_install/lib/libsqlite3.* /usr/local//
    arm/3.4.1/arm-linux/lib/
    $ sudo cp sqlite-3.6.1/_install/include/* /usr/local/arm/3.4.1//
      arm-linux/include/
    这样编译就比较方便了:
    $ arm-linux-gcc -o test test.c -lsqlite3 -Wall 
 
 
sqlite3嵌入式数据库arm+linux移植:
一直想找个嵌入式数据库来用用,几经辛苦,终于了解到有Berkeley DB和SQLite两种很不错的数据库。在一番衡量之后,决定选用SQLite,毕竟它支持SQL。虽然性能比不上Berkeley DB,但免费小巧,速度快。再者它支持SQL92标准,可移植性好。BDB虽然很强可以用于工业应用,但由于不是关系数据库,俺担心移植
性问题。
1.   下载sqlite3源代码
2. 解压源代码:
    tar  xvzf   sqlite-amalgamation-3.6.1.tar.gz
3. 配置交叉编译到arm linux平台:
    ./configure --prefix=/home/rootfs/home/sqlite --target=arm-linux --host=arm-linux LD=arm-linux-ld
4. 编译:
       make
5. 安装:
      make install
     头文件和生成的库文件将安装到:/home/rootfs/home/sqlite目录下。
6. 写自己的数据库应用
#i nclude <stdio.h>
#i nclude <sqlite3.h>
 
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("/n");
  return 0;
}
 
int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;
 
  if( argc!=2 ){
    fprintf(stderr, "Usage: %s DATABASE /n", argv[0]);
    return 0;
  }
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return 0;
  }
 
  char *sql = " CREATE TABLE SensorData(               /
                        ID       INTEGER PRIMARY KEY,  /
                        SensorID INTEGER,              /
                        SiteNum  INTEGER,              /
                        Time     VARCHAR(12),          /
                        SensorParameter REAL           /
                );";
   //使用sql字符串指定的sql语言 创建数据表SensorData
  sqlite3_exec( db , sql , 0 , callback , &zErrMsg ); 
 
   //插入数据到数据表
  sql = "INSERT INTO 'SensorData' VALUES( 0 , 1 , 1 ,  '200605011206', 18.9 );" ;
   sqlite3_exec( db , sql , 0 , callback , &zErrMsg );

   //插入数据到数据表
  sql = "INSERT INTO  'SensorData'  VALUES(1 , 1 , 1 , '200605011306', 16.4 );" ;
  sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
 
  int nrow = 0, ncolumn = 0;
  char **azResult;
  int i;
  //从数据表查询数据
  sql = "SELECT * FROM SensorData ";
  sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
 
  printf( "row:%d column=%d" , nrow , ncolumn );
  printf( "The result of querying is :" );
  for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ){
     printf( "azResult[%d] = %s /r/n", i , azResult[i] );
  }
 
  sqlite3_free_table( azResult );
 
  if( rc!=SQLITE_OK ){
        fprintf(stderr, "SQL error: %s/n", zErrMsg);
        sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
 
  return 0;
}
7. 编写Makefile
 prefix=/home/rootfs/home/sqlite
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Libs = -L${libdir} -lsqlite3 -lpthread
Cflags = -I${includedir}
 
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
 
radiodb: radiodb.o
        $(CC) $^ $(Libs)  -o $@
radiodb.o:radiodb.c
        $(CC) $(Cflags) -c $^ -o $@
clean:
        rm -rf radiodb  *.o
in:
        cp radiodb /home/rootfs/home/sqlite
   注意makefile里的红色字体内容可以在sqlite安装目录的lib下的pkconfig下的文件查得。
 
应该是环境变量的问题.
export LD_LIBRAY_PATH=/***/lib:$LD_LIBRARY_PATH
/***/lib 为sqlite库文件的路径.
libsqlite3.so: symbolic link to libsqlite3.so.0.8.6
libsqlite3.so.0: symbolic link to libsqlite3.so.0.8.6
libsqlite3.so.0.8.6: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped
就是把这三个文件所在的目录的路径加入到LD_LIBRARY_PATH中就可以了.
或者是把这三个文件拷贝到开发板的/usr/lib目录下就OK了.
记住:拷贝时要加选项: cp -arf libsqlite.s* /ust/lib就行了.
 
 
这篇虽然很老了,但是后面的调试很详细,也许对你很有帮助:
虽然网上有很多高手对 sqlite 数据库的ARM-Linux移置进行过详细的介绍,但最近发现很多朋友还在问这个问题。
虽然我对 sqlite 的了解说不上透彻,但是写点东西让初学者能够很快上手,特别是能够让刚接触sqlite的朋友也能轻松完成移置工作,
也算是我的心愿之一。也许很多高手会觉得我这是班门弄斧,但是我还是想写点关于 sqlite 的基本知识,这样也许能给予某些人一些帮助,希望如此。 

1.1 sqlite简介
(跳过)

1.2 下载代码

(跳过)
1.3 交叉编译sqlite库
准备工作:
1. 取得一个 arm-linux-gcc 的编译器。
2. sqlite的源码 sqlite-3.0.8.tar.gz (本文以)
好了,我们可以开始了。 
这里设 arm-linux-gcc 在 /usr/local/arm-linux/bin/ 目录下
解压sqlite-3.0.8.tar.gz 到/usr/local/arm-linux/sqlite
# tar zxvf sqlite-3.0.8.tar.gz -C /usr/local/arm-linux/sqlite
# cd /usr/local/arm-linux/sqlite
将目录下的 configure 文件的
19206行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
20107行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
20514行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
20540行 { (exit 1); exit 1; }; }改为 { (echo 1); echo 1; }; }
# mkdir /usr/local/arm-linux/sqlite-arm-linux
# cd /usr/local/arm-linux/sqlite-arm-linux
设置交叉编译环境
# export PATH=/usr/local/arm-linux/bin:$PATH
配置:
# ../sqlite/configure --host=arm-linux --prefix=/usr/local/arm-linux/sqlite-arm-linux
注意:这里不用写成了 "../sqlite/configure --host=arm-linux --prefix=/usr/local/arm-linux/sqlite-arm-linux/"
这最后一个斜杠"/"不要带上了。
如果一切顺利的话,会在/usr/local/arm-linux/sqlite-arm-linux目录下生成一些相关文件:
config.log config.status libtool Makefile sqlite3.pc
改/usr/local/arm-linux/sqlite-arm-linux/Makefile文件的 BCC = arm-linux-gcc -g -O2 为 BCC = gcc -g -O2
编译安装:
# make
# make install
/usr/bin/install -c -d /usr/local/arm-linux/sqlite-arm-linux/lib
./libtool --mode=install /usr/bin/install -c libsqlite3.la /usr/local/arm-linux/sqlite-arm-linux/lib
/usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/arm-linux/sqlite-arm-linux/lib/libsqlite3.so.0.8.6
(cd /usr/local/arm-linux/sqlite-arm-linux/lib && rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0)
(cd /usr/local/arm-linux/sqlite-arm-linux/lib && rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so)
/usr/bin/install -c .libs/libsqlite3.lai /usr/local/arm-linux/sqlite-arm-linux/lib/libsqlite3.la
/usr/bin/install -c .libs/libsqlite3.a /usr/local/arm-linux/sqlite-arm-linux/lib/libsqlite3.a
arm-linux-ranlib /usr/local/arm-linux/sqlite-arm-linux/lib/libsqlite3.a
chmod 644 /usr/local/arm-linux/sqlite-arm-linux/lib/libsqlite3.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/arm-linux/sqlite-arm-linux/lib
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/arm-linux/sqlite-arm-linux/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
 
 
 
 
2 sqlite3嵌入式数据库的ARM-Linux移置详解 
 during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
/usr/bin/install -c -d /usr/local/arm-linux/sqlite-arm-linux/bin
./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/arm-linux/sqlite-arm-linux/bin
/usr/bin/install -c .libs/sqlite3 /usr/local/arm-linux/sqlite-arm-linux/bin/sqlite3
/usr/bin/install -c -d /usr/local/arm-linux/sqlite-arm-linux/include
/usr/bin/install -c -m 0644 sqlite3.h /usr/local/arm-linux/sqlite-arm-linux/include
/usr/bin/install -c -d /usr/local/arm-linux/sqlite-arm-linux/lib/pkgconfig;
/usr/bin/install -c -m 0644 sqlite3.pc /usr/local/arm-linux/sqlite-arm-linux/lib/pkgconfig;
注明: "# make install" 这一步将会在 /usr/local/arm-linux/sqlite-arm-linux/lib 生成库文件
# cd lib
# file libsqlite3.so.0.8.6
libsqlite3.so.0.8.6: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped
此时生成的sqlite文件是还未strip过的,你可以使用命令“file sqlite”查看文件信息。用strip处理过后,将去掉其中的调试信息,执行文
件大小也将小很多。命令如下:
# arm-linux-strip libsqlite3.so.0.8.6
另外可以生成帮助文档,以便以后查询。
# make doc
好了,这样我们已经编译出了 

1.4 在ARM板上运行sqlite
将/usr/local/arm-linux/sqlite-arm-linux/bin/目录下的 sqlite3 文件下载到你的arm板上,
方法很多,你需要根据自己的情况来选择。如ftp,nfs,串口等。
好,开始运行
chmod +wx sqlite
[root@51Board var]# ./sqlite3 zieckey.db
./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file
or directory
这里是因为刚刚编译时编译的是动态连接库形式的,所有我们还的将库文件下载到ARM板上。
将 /usr/local/arm-linux/sqlite-arm-linux/lib 目录下所有文件下到ARM板上。
再次运行,
[root@51Board var]# ./sqlite3 zieckey.db
./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file
or directory
还是出错,哦,我们没有设置环境变量,
假设我们下在库文件在ARM板上的 /usr/qpe/lib/ 目录下,这里设置环境就像下面:
[root@51Board var]# export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH
好了这样就可以运行了:
[root@51Board var]# ./sqlite3 zieckey.db
SQLite version 3.0.8
Enter ".help" for instructions
sqlite>
看见
sqlite>
提示符号没有?成功了。哈哈!!
打个“.help”来看看命令先:-)
sqlite>.help
好了。现在sqlite已经在arm-linux下跑了起来。如何,感觉很high吧。
1.5 编写一个程序到ARM板上运行

现在我们来写个C/C++程序,调用 sqlite 的 API 接口函数查询数据库中表的内容。并在ARM板上运行。
下面是一个C程序的例子,显示怎么使用 sqlite 的 C/C++ 接口. 这个函数调用sqlite3_open() 在 22 行打开数据库, sqlite3_get_table 在 40 行执行 SQL 命令, 并且sqlite3_close() 在 47 行关闭数据库连接。
代码:
 
// name: test_sqlite.c
// This file is used to test C/C++ API for sqlite
 
 
 
3 sqlite3嵌入式数据库的ARM-Linux移置详解 
 
// Author : zieckey
// 2006/06/28
 

#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc ){
fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("open zieckey.db successfully!/n");
sqlite3_close(db); //关闭数据库
return 0;
}
 

编译:# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out
也许会碰到类似这样的问题:
# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out
test_sqlite.c:7:21: sqlite3.h: No such file or directory
test_sqlite.c: In function `main':
test_sqlite.c:11: error: `sqlite3' undeclared (first use in this function)
test_sqlite.c:11: error: (Each undeclared identifier is reported only once
test_sqlite.c:11: error: for each function it appears in.)
test_sqlite.c:11: error: `db' undeclared (first use in this function)

这是个没有找到库文件的问题。
由于用到了用户自己的库文件,所用应该指明所用到的库,我们可以这样编译:
 
# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out -lsqlite3
 
我用用 -lsqlite3 选项就可以了(前面我们生成的库文件是 libsqlite3.so.0.8.6 等,
去掉前面的lib和后面的版本标志,就剩下 sqlite3 了所以是 -lsqlite3 )。
不过似乎还是可能出现问题,例如下面的这样:
]# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out -lsqlite3
test_sqlite.c:7:21: sqlite3.h: No such file or directory
test_sqlite.c: In function `main':
test_sqlite.c:11: error: `sqlite3' undeclared (first use in this function)
test_sqlite.c:11: error: (Each undeclared identifier is reported only once
test_sqlite.c:11: error: for each function it appears in.)
test_sqlite.c:11: error: `db' undeclared (first use in this function)

我们刚才在编译安装的时候,选择了安装路径是 /usr/local/arm-linux/sqlite-arm-linux 
这样编译安装时,sqlite的库文件将会生成在 /usr/local/arm-linux/sqlite-ix86-linux/lib 目录下
这时编译还要指定库文件路径,因为系统默认的路径没有包含 /usr/local/arm-linux/sqlite-arm-linux/lib
 
# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out -lsqlite3 -lsqlite3 -L/usr/local/arm-linux/sqlite-arm-linux/lib
 
如果还不行的话,可能还需要指定头文件 sqlite3.h 的路径,如下:
 
# arm-linux-gcc test_sqlite.c -o test_sqlite_for_arm.out -lsqlite3 -L/usr/local/arm-linux/sqlite-arm-linux/lib -I/usr/local/arm-linux/sqlite-arm-linux/include
现在可以看看生成的文件格式:
# file test_sqlite_for_arm.out
test_sqlite_for_arm.out: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
这说明已经初步成功了。

下面就把 test_sqlite_for_arm.out 文件下载到ARM板上运行了(下载过程不用说了,如串口、ftp、nfs等待都可以)
运行:
[root@51Board var]# ./test_sqlite_for_arm.out
./test_sqlite_for_arm.out: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory

运行是也许会出现类似上面的错误。
这个问题是由于运行沿着系统默认路径没有找到库文件引起的。这时需要指定 libsqlite3.so.0 库文件的路径。
在shell下输入:
[root@51Board var]# export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH
再运行
# test_sqlite_for_arm.out
open zieckey.db successfully!
 

总结:这里,我们了解了sqlite的移置基本过程,怎么在C/C++中查询数据库中表的内容。
本文一定存在很多不妥或者错误之处,还劳烦各位不吝赐教指正。

 

转载网址:http://blogold.chinaunix.net/u3/105042/showart_2158035.html

FreeRTOS-Plus-CLI使用笔记 FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置 阅读详情

相关推荐

华为CNA VRM搭建(使用vmware worfstartion搭建)

华为CNA和VRM在 vmware workstation安装使用

weixin_70595351的博客 1809

嵌入式数据库SQLite移植到S3C2410的方法

以下是本人的工作目录,可根据自己的情况进行调整。 1.交叉编译环境建立:用于交叉编译sqlite 安装cross-2.95.3.tar.bz2交叉编译工具到/usr/local/arm目录下。 解压sqlite-3.3.8到/usr/localsqlite-arm/sqlite-3.3.8,并创建文件夹 cd /usr/localsqlite-arm/sqlite-3.3.8  mkdi

zzqmettle的专栏 334

PCIe ATS介绍

主机侧使用IOMMU完成设备地址到物理memory地址的转换,以及设备访问权限的检查。但如果所有PCIe设备都在进行DMA操作,则TA(Translation Agent)和ATPT(Address Translation and Protection Table)则会成为瓶颈,从而影响系统的latency。

maxwell2ic的博客 6021

linux sqlite3怎么通过命令行退出

.help可打印出帮助文档 .quit就可以退出sqlite3,回来shell界面 嵌入式数据库SQLite移植到S3C2410的方法 以下是本人的工作目录,可根据自己的情况进行调整。 1.交叉编译环境建立:用于交叉编译sqlite 安装cross-2.95.3.tar.bz2交叉编译工具到/usr/local/arm目录下。 解压sqlite-3.3.8到/usr/l

luochengguo的专栏 6242

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 308

AI驱动全栈开发实战:基于Spec与Codex的规格驱动开发指南

1. 先搞清楚“AI重构前端全栈”到底在解决什么实际问题 最近很多人在聊“AI重构前端全栈”,听起来像是又一个营销概念。但如果你真的拆开看,它核心解决的是一个非常具体且痛苦的问题: 一个开发者,如何从零开始,系统性地、不跑偏地完成一个完整项目,并且保证代码质量和架构一致性。 传统开发流程里,产品经理出PRD,前后端开会对齐,前端画页面,后端写接口,测试再介入。这个过程沟通成本高,文档容易过时,新人上手慢。而“AI重构”的思路,是试图用一套 规范化的指令(Spec) 来驱动AI(比如Codex这类模型)生成代

weixin_30596023的博客 459

基于FS2410的SQLite移植

一、引言         本文将简要介绍如何在FS2410平台上移植SQLite嵌入式数据库。SQLite是一个采用C语言开发的嵌入式数据库引擎。在不至于引起混淆的情况下,本文也将其简称为QLite3。数据库的目标是实现对数据的存储、检索等功能。传统的数据库产品除提供了基本的查

Win_cao专栏 914

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 357

移植sqlite-3.5.6到s3c2410上

移植sqlite-3.5.6到s3c2410上 pc机上要安装交叉编译环境(我安装的是arm-linux-gcc 3.4.1) 把sqlite-3.5.6.tar.gz解压 #tar -vzxf sqlite-3.5.6.tar.gz 进入sqlite-3.5.6目录 #cd sqlite-3.5.6 创建sqlite-arm目录,并进入该目录 #mkdir sq

ke123456le的专栏 595

华为OD机试真题 新系统 - 勇攀数字高峰 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2089

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 345

移植sqlite3.7.8到s3c2410

编译环境: 主机:Ubuntu10.04 交叉编译工具:4.1.1 开发板:arm2410 源码:sqlite-autoconf-3070800.tar.gz (下载于:http://www.sqlite.org/download.html ) 1.解压数据库源文件并进入解压后的目录,如下: #tar - zxvf sqlite-autoconf-3...

weixin_33893473的博客 116

10. 重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器!

重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器! 全网最详细的Spring AI 文章,每章都会提供代码入口,让你更容易得入门和理解Spring AI 相关概念,直接节约你百分之六十的学习成本时间。

gorgor在码农 1065

SQLite3.3.6在ARM2410上的移植

SQLite3.3.6在ARM2410上的移植要将SQLite3.3.6移植到ARM2410开发板上,除了要有底层操作系统的支持外,还必须要有相应的交叉编译工具链。由于ARM2410开发板采用的是ARM-Linux作为底层操作系统,因此需要首先安装ARM-Linux工具链。1.交叉编译环境建立:拷贝cross-2.95.3.tar.bz2到/usr/local目录下并解压缩。cp cross-2.

1283

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

基于Qt/Embedded的物流信息终端导航定位功能设计

基于Qt/Embedded的物流信息终端导航定位功能设计[日期:2008-12-3 13:40:00] 作者:未知来源:        本文介绍了Qt/Embedded图形界面系统在嵌入式Linux系统和S3C2410平台的物流信息终端上的移植与开发过程,以及在物流信息终端上定位功能的系统设计方案和Qt/Embedded编程实现,并给出实验结果

dongliqiang2006的专栏 1830

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于Qtopia_Core的嵌入式Linux_GUI平台移植与开发 (转)

<br />http://wenku.baidu.com/view/27536350f01dc281e53af089.html<br /> <br />一篇很好的在线文档。描述的开发板用的是:s3c2410,嵌入式linux内核,sqlite数据库。

zenwanxin的专栏 433

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python版本可执行可嵌入_python向ARM9的移植

前言我需要在Arm9的s3c2410 CPU上运行python,以下是我的编译过程。host编译环境:ubuntu 7.04, gcc 4.2.1, arm-linux-gcc 3.3.2要cross compile的程序:sqlite 3.5.6,python 2.5.1编译sqlite我推荐使用amalgamation版本的源代码,这个代码只有几个文件而已,编译起来方便,而且据说 编译器好的话...

weixin_39740283的博客 363

远程抄表系统集中器的设计与实现

远程抄表系统集中器的设计与实现【摘 要】: 本文设计了一种用于远程抄表系统的高性能集中器,对集中器的图形界面、数据处理和远程通讯的实现进行了详细阐述。该集中器采用基于S3C2410的硬件平台,实现了液晶屏、以太网等接口;软件移植并使用嵌入式GUI、嵌入式数据库、嵌入式web服务器,在满足新的技术标准要求的同时,大幅度提高了系统的整体性能。关键词:集中器S3C2410 嵌入式GUI 嵌入式数

曾保权的技术专栏 4797

基于Goahead和SQLite的数据采集与查询

今天看到下面的这个文章,真的是大爱啊!文章讲解的很详细,很有用! 摘  要:在远程抄表、智能家居等各种嵌入式系统中,都需要实现数据采集和远程查询。提出了一种基于goahead和sqlite的实现方案,并给出了实现细节,包括移植编译安装以及交互式程序的编写和其中遇到的问题。本方案在模块化和扩展性方面要好于其他方案,容易借鉴,已得到成功应用。 关键词:goahead;sqlite;嵌入式web服务

jk110333的专栏 4373

wxsqlite3 编译 linux,sqlite交叉编译

sqlite数据库的ARM-Linux移置进行过程准备工作:1.取得一个arm-linux-gcc的编译器。2. sqlite的源码sqlite-3.8.8.tar.gz(本文以)好了,我们可以开始了。这里设arm-linux-gcc在/arm2410s/gui/tools/usr/local/arm/3.4.1/bin /目录下解压sqlite-3.8.8.tar.gz到/usr/local/a...

weixin_39652658的博客 409

sqlite 交叉编译

1、做移植工作前我们首先应当做好交叉编译工具链,然后下载sqlite-3.3.17  http://www.sqlite.org/download.html 2、解压到你新建的一个目录里 tar -vxzf get sqlite-3.3.17.tar.gz  并进入解压好的目录 cd sqlite-3.6.17 3、此时在 sqlite-3.6.17 在新建一个目录名字可以随便取,如:sq

intruder83的专栏 454

Python2.5.4移植到arm-linux

 Python2.5.4移植到arm-linux 转载请注明出处:http://blog.csdn.net/AIXT2006/archive/2009/05/31/4229779.aspx Ver1.2 by tian  2009-05-311       移植需求需求:在Arm9上运行python2.5.4。 ARM Target环境:S3

丐帮IT分舵八袋弟子的技术博客 8962

Python2.5.4移植项目:import module问题的解决与boa服务器CGI访问问题

 承接上一篇文章:《Python2.5.4移植到arm-linux》http://blog.csdn.net/AIXT2006/archive/2009/05/31/4229779.aspx 1       Import module问题的解决此问题已解决。经过LeoJay的指导:“关于你不能import module的问题,我想是因为你没有把build.arm/build

丐帮IT分舵八袋弟子的技术博客 3556
上一篇: 解读QT信号与槽机制里 QMetaObject::connectSlotsByName(QObject *o)的源码
下一篇: sqlite 执行标准sql语法
control_tech
博客等级 码龄17年 53粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值