sqlite嵌入式資料庫在arm-linux下的編譯全攻略

admin @ 2014-03-25 , reply:0

概述
第一步sqlite在arm-linux下的編譯1、下載sqlite:請到http://www.sqlite.org/download.html,將下載的代碼包解開,將生成sqlite目錄,另外新建一個……

第一步 sqlite在arm-linux下的編譯
1、 下載sqlite:請到http://www.sqlite.org/download.html,將下載的代碼包解開,將生成sqlite目錄,另外新建一個build目錄,如sqlite-arm-linux,應該是和sqlite目錄平行的同級目錄。

2、 請先確定你的PATH中已經包含交叉編譯工具arm-linux-gcc。可用“echo $PATH”命令查看。如我的是“/opt/toolchain/gcc 3.2/toolchain/bin/”

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時用到。

5、 修改Makefile文件
請修改Makefile文件,將下面的這行
BCC = arm-linux-gcc -g -O2
改掉,改成:
BCC = gcc -g -O2

一般地,我們都是將sqlite放到arm-linux的硬體板子上運行,所以我們一般將其編譯成靜態鏈接的形式。如果是共享so庫的話,比較麻煩。
所以繼續修改Makefile,找到如下地方:
sqlite:
將有其後的“libsqlite.la”改成
“.libs/libsqlite.a”
大功告成,現在可以make了。
應該不會出錯,生成sqlite,libsqlite.a,libsqlite.so。你可以使用命令:find -name "sqlite";find -name "*.a";find -name "*.so"查看文件所在的目錄。
此時生成的sqlite文件是還未strip過的,你可以使用命令“file sqlite”查看文件信息。用strip處理過後,將去掉其中的調試信息,執行文件大小也將小很多。命令如下:
arm-linux-strip sqlite

第二步 在arm板上運行sqlite
將sqlite拷貝到你的arm板上,方法很多,你需要根據自己的情況來選擇。如ftp,cmdftp,wget等。
我的方法是使用wget將sqlite下載到arm板的/tmp目錄,此目錄是可寫的。命令如下:
busybox wget ftp://192.168.0.100/sqlite
上面的命令,你可以看到我的板子上是已經有busybox來支持wget命令了的。:-)
好,開始運行
chmod +wx sqlite
./sqlite test.sqlite
會出現
sqlite>
提示符號,打個“.help”來看看命令先:-)
sqlite>.help
好了。現在sqlite已經在arm-linux下跑了起來。如何,感覺不錯吧,在arm板子上玩玩“select * from”語句蠻爽吧:-)

友情提示:
如果sqlite在處理資料庫過程中出現“The database disk image is malformed”,如:你在delete from sometable時,可能遇到這個問題。
那麼就是你的arm板上的空間不夠(如在/tmp下),請刪除掉一些文件。我遇到的情況是空間還剩1-2M都會出現這個提示。刪除后空餘4M,就正常了(如delete from sometable)。我是開的8M的ramdisk做開發玩的:-)




[admin via 研發互助社區 ] sqlite嵌入式資料庫在arm-linux下的編譯全攻略已經有3530次圍觀

http://cocdig.com/docs/show-post-42626.html