3、 为了在arm-linux下能正常运行sqlite,我们需要修改一处代码,否则在arm板上运行sqlite时会出现下面的东东: =============================== 在文件btree.c中抛出断言, assert( sizeof(ptr)==sizeof(char*) ); =============================== 此断言是为了保证btree(B树)有正确的变量大小,如“ptr”和“char*”。 在不同的体系结构的linux,如x86和arm,会有些差别。刚好让我们在arm-linux下遇到了:-)。那么我们可以做一定的修改。 请修改sqlite/src/sqliteInt.h,找到如下部分: #ifndef INTPTR_TYPE # if SQLITE_PTR_SZ==4 # define INTPTR_TYPE int # else # define INTPTR_TYPE long long # endif 在上面的代码前加上一句: #define SQLITE_PTR_SZ 4 这样后面的“typedef INTPTR_TYPE ptr;”就是定义的“int”类型,而不是“long long”。
4、 准备使用configure进行一些配置。请在sqlite目录下的configure中找到如下4处,并将他们注释掉,这样可以让configure不去检查你的交叉编译环境。在此提示一下:请你自己确定自己的“arm-linux-”系列命令在你的PATH环境变量中。如:你可以输入“arm-linux-”再按“TAB”键,看其是否自动完成命令行。 #if test "$cross_compiling" = "yes"; then # { { echo "$as_me:12710: error: unable to find a compiler for building build tools" >&5 #echo "$as_me: error: unable to find a compiler for building build tools" >&2;} # { (exit 1); exit 1; }; } #fi
. . .
#else # test "$cross_compiling" = yes && # { { echo "$as_me:13264: error: cannot check for file existence when cross compiling" >&5 #echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} # { (exit 1); exit 1; }; }
. . .
#else # test "$cross_compiling" = yes && # { { echo "$as_me:13464: error: cannot check for file existence when cross compiling" >&5 #echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} # { (exit 1); exit 1; }; }
. . .
#else # test "$cross_compiling" = yes && # { { echo "$as_me:13490: error: cannot check for file existence when cross compiling" >&5 #echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} # { (exit 1); exit 1; }; } 注释掉后,就可以执行configure了。在sqlite-arm-linux目录下,输入如下命令: ../sqlite/configure --host=arm-linux 这样在你的build目录中就将生成Makefile和一个libtool脚本,这些将在make时用到。
友情提示: 如果sqlite在处理数据库过程中出现“The database disk image is malformed”,如:你在delete from sometable时,可能遇到这个问题。 那么就是你的arm板上的空间不够(如在/tmp下),请删除掉一些文件。我遇到的情况是空间还剩1-2M都会出现这个提示。删除后空余4M,就正常了(如delete from sometable)。我是开的8M的ramdisk做开发玩的:-)。 但后来空间小到500K时,却没出现错误提示,有点不解:-) 但可以肯定的一点是:这个问题的出现应该不是数据库文件必须是要在对应的系统平台上生成引起的,即你在x86下生成的数据库文件,在arm上应该是操作一切正常。极大可能是arm板存储空间的问题引起的,在x86上,有硬盘,就不会出现这个问题。 我的sqlite在板子上跑着时,打开一个200K的数据库文件后,sqlite占用的memory为大约150K.