在ARM Linux平台上移植SQLite

2021-05-22 08:28:34 字數 2646 閱讀 2531

在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 語言為主,但是也支援...