在arm-linux平台上移植sqlite
首先從http://sqlite.org
的quick start文件中的測試程式為例對移植到arm-linux上的sqlite3進行測試。該程式清單如下:
#include
#include
static int callback(void *notused, int argc, char **argv, char **azcolname)
rc = sqlite3_open(argv[1], &db);
if( rc )
rc = sqlite3_exec(db, argv[2], callback, 0, &zerrmsg);
if( rc!=sqlite_ok )
sqlite3_close(db);
return 0;
}將此源程式儲存為test.c,然後,通過如下命令編譯該程式:
# arm-linux-gcc -i /home/liyan/sqlite/sqlite-3.4.2 -l /home/liyan/sqlite/sqlite-3.4.2 -o test test.c -lsqlite3
注意:可能會出現以下錯誤
/home/liyan/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3ec): in function `sqlite3unixdlopen':
: undefined reference to `dlopen'
/home/liyan/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3f4): in function `sqlite3unixdlsym':
: undefined reference to `dlsym'
/home/liyan/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3f8): in function `sqlite3unixdlclose':
: undefined reference to `dlclose'
collect2: ld returned 1 exit status
解決方法:在編譯命令後加 「-ldl」
# arm-linux-gcc -i /home/liyan/sqlite/sqlite-3.4.2 -l /home/liyan/sqlite/sqlite-3.4.2 -o test test.c -lsqlite3 -ldl
上述編譯命令中:
-i /home/liyan/sqlite/sqlite-3.4.2指明了標頭檔案sqlite3.h所在的目錄;
-l /home/liyan/sqlite/sqlite-3.4.2指定了庫函式檔案libsqlite3.a所在的目錄;
-o test指定編譯生成的檔名為test,test.c是源程式檔案;
-lsqlite3指明要鏈結靜態庫檔案libsqlite3.a。
[root@ee301 sqlite]# ls -l test
-rwxr-xr-x 1 root root 359148 09-03 13:22 test
接下來就可以測試test程式了。test程式接受兩個引數:第乙個引數為資料庫檔名,第二個引數為要執行的sql語句。程式中與sqlite3的api相關的地方主要有四個:sqlite3_open(), sqlite3_exec(), sqlite3_close(), sqlite3_free()。關於sqlite3的api介面請參閱文獻[1]。
下面是測試test程式的完整過程,(在板子上):
/var/tmp/ly # ./test xyz.db "create table tbl0(name varchar(10), number smallint);"
/var/tmp/ly # ./test xyz.db "insert into tbl0 values('cyc', 1);"
/var/tmp/ly # ./test xyz.db "insert into tbl0 values('dzy', 2);"
/var/tmp/ly # ./test xyz.db "select * from tbl0;"
name = cyc
number = 1
name = dzy
number = 2
解釋一下上面所用的測試命令:
第一條命令在xyz.db這個資料庫檔案中建立了乙個tbl0表,表中包含兩個字段,欄位name是乙個變長字串,欄位number的型別為smallint;
第二條命令向資料庫的tbl0表中插入了一條記錄(『cyc』,1);
第三條命令向資料庫的tbl0表中插入了一條記錄(『dzy』,2);
第四條命令則是查詢表tbl0中的所有內容,與預期的一樣,這條命令列印除了資料庫中的兩條剛插入的記錄。
由此可以得出結論,這幾條命令確實都已經按照預期的目標工作了。
同時,在向資料庫中插入上面所示的資料之後,可以看到資料庫檔案xyz.db大小已經發生了變化:
/var/tmp/ly # ls -l test
-rw-r--r-- 1 root root 2048 sep 3 2007 xyz.db
此時資料庫檔案xyz.db的大小為2k。自此,sqlite3資料庫在sitsang評估板上移植完成。測試結果表明資料庫能夠正常工作。
OpenCV在龍芯平台上的移植
opencv 2.2.0的移植方法 按照文章 opencv在arm上的移植 emouse 給出的步驟方法進行 修改的地方 1 原指定交叉編譯器為arm的都改為mipsel,交叉編譯器的路徑也為redhat虛擬機器中的實際路徑 usr local mips linux gcc gcc 3.4.6 2f...
Qt5 3 2在ARM Linux平台的移植
3 指定交叉編譯器 修改配置檔案 home qt qt everywhere opensource src 5.3.2 qtbase mkspecs linux arm gnueabi g qmake.conf qmake configuration for building with arm li...
在Symbian OS平台上移植C語言工程的方法
symbian是應用於高階手機 智慧型手機 上的一種作業系統,諾基亞 索愛的高階手機便是基於symbian作業系統的,symbian os的優勢在於其高穩定性和節能性,並且有眾多主流手機產商的支援,現在是高階手機上的主流作業系統之一。在synbian os上的應用開發主要是以c 語言為主,但是也支援...