1. 程式人生 > >在arm-linux平臺上的編譯應用SQLite-3_5_8

在arm-linux平臺上的編譯應用SQLite-3_5_8

最近拿了一塊Flysun9200-DVK2。3開發板,板子基於Atmel公司的AT91RM9200 arm處理器,內嵌arm9200T核心,主頻是180MHz。要在上面開發一個集採集、儲存、資料分析、統計管理、傳送、遠端互動等功能的小程式。由於涉及每鍾要素的儲存與統計,考慮使用SQLite。

SQLite 第一個Alpha版本誕生於2000年5月,是實現了SQL 92標準的一個大子集的嵌入式資料庫,其以在一個庫中組合了資料庫引擎和介面,能將所有資料儲存於單個檔案中。官方測試表明SQLite的功能在一定程度上居於MySQL 和PostgreSQL之間,在效能上SQLite常常快2-3倍 (甚至更多)。另處,SQLite的記憶體組織非常高效,只需在很小的記憶體中維護其很小的尺寸,遠比其它任何資料庫系統都小。這個特點非常適合嵌入式應用。

一、主機環境

1、虛擬機器 VMware Workstation

2、Redhat 9(在Fedora 7中也是方法相同)

3、交叉編譯器:Redhat 9自帶,3.4.1版本。

二、交叉編譯 (以下全是在redhat中,用root 使用者操作)

1、下載SQLite-3.5.8.tar.gz

2、在root 的.bash_profile中加入以下環境變數以方便操作

PATH=$PATH:/usr/local/arm/3.4.1/bin

3、解壓SQLite-3.5.8.tar.gz 到任意目錄(比如:/test/SQLite-3.5.8)

# tar zxvf SQLite-3.5.8.tar.gz

4、 檢查交叉編譯器arm-linux-gcc是否是/usr/local/arm/3.4.1/bin/arm-linux-gcc

#which arm-linux-gc

5、執行配置檔案

在開發板上不需要使用 tcl,使用--disable-tcl引數,--prefix可以隨意指定,只要方便使用。

# ./configure --host=arm-linux --prefix=/home/SQLite-3.5.8/build/_install --disable-tcl

如果一切順利,會根據系統環境生成Makefile。

6、編譯

# make && make install

如果通過會在/home/SQLite-3.5.8/build/_install路徑中生成三個目錄:

bin 內有可執行檔案SQLite3 ,可以放在開發板上執行

include 內有SQLite3.h與SQLite3ext.h兩個標頭檔案,是我們要得到的檔案

lib   內有libSQLite3.a靜態庫檔案和libSQLite3.so.0.8.6動態庫檔案,也是我們需要的檔案

7、剝離除錯資訊

# cd /home/SQLite-3.5.8/build/_install/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 libSQLite3.so.0.8.6”檢視檔案資訊。用strip處理過後,將去掉其中的除錯資訊,執行檔案大小也將小很多。

# arm-linux-strip libSQLite3.so.0.8.6

8、上面已經生成了我們需要的頭與庫,建立一個測試程式,命名為test.c,內容如下:
QUOTE:
#include
#include <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, argv ? argv : "NULL");
}
printf("/n");
return 0;
}

int main(int argc, char **argv)
{
sqlite3*db;
char *zErrMsg = 0;
int rc;

if (argc != 3) {
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT/n", argv[0]);
exit(1);
}
rc =
sqlite3_open(argv[1], &db);
if (rc) {
fprintf(stderr, "Can't open database: %s/n",
sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc =
sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if (rc != SQLite_OK) {
fprintf(stderr, "SQL error: %s/n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}

9、編譯test.c檔案

#arm-linux-gcc –I /home/SQLite-3.5.8/build/_install/include –L /home/SQLite-3.5.8/build/_install/lib -o test test.c -lSQLite3

三、在開發板上使用SQLite

1、將在Redhat上交叉編譯的/home/SQLite-3.5.8/build/_install目錄拷到開發板中

我是用minicom直接拷貝,方法是在minicomk 中按:︿A S(ctrl+A 放開後再按S,一下空格是選擇,兩下空格是進入),這方便可先將目錄打包:

#cd /home/SQLite-3.5.8/build/

#tar cvf SQLite3.tar _install

通過minicom把SQLite3.tar 拷到開發板解包。

[/mnt/yaffs]tar xvf SQLite3.tar

把/mnt/yaffs/_install 目錄改名為/mnt/yaffs/SQLite3.5.8,這個目錄中應該有bin、lib、include三個目錄及以下的檔案。

2、設定環境變數

[/mnt/yaffs/SQLite3.5.8]export LD_LIBRARY_PATH=/mnt/yaffs/SQLite3.5.8/lib:$LD_LIBRARY_PATH

[/mnt/yaffs/SQLite3.5.8]export PATH=/mnt/yaffs/SQLite3.5.8/bin/:$PATH

建議寫一個export.sh

[/mnt/yaffs/SQLite3.5.8]cat >export.sh

#!/bin/sh

export LD_LIBRARY_PATH=/mnt/yaffs/SQLite3.5.8/lib:$LD_LIBRARY_PATH

export PATH=/mnt/yaffs/SQLite3.5.8/bin/:$PATH

^C(ctrl+C)結束檔案

再執行export.sh輸出環境變數

[/mnt/yaffs/SQLite3.5.8]. ./export.sh(.空格 +./export.sh)

這時可以就可以在開發板上執行SQLite3了

[/mnt/yaffs/SQLite3.5.8]SQLite3

SQLite version 3.5.8

Enter ".help" for instuctions

SQLite>

用.exit退出SQLite3。

3、執行測試程式

將test通過minicom傳到開發板,比如:/mnt/yaffs

再將/mnt/yaffs/SQLite3.5.8/lib下的三個庫連線到/lib中,由於我的開發板/lib中空間太少,做如下軟體連線:

[/lib]ln -s /mnt/yaffs/SQLite3.5.8/lib/libSQLite3.so libSQLite3.so

[/lib]ln -s /mnt/yaffs/SQLite3.5.8/lib/libSQLite3.so.0 libSQLite3.so.0

[/lib]ln -s /mnt/yaffs/SQLite3.5.8/lib/libSQLite3.so.0.8.6 libSQLite3.so.0.8.6

至此test程式已經可以在開發板中執行。

[/mnt/yaffs]./test

Usage: test DATABASE SQL-STATEMENT

[/mnt/yaffs]

相關推薦

arm-linux平臺編譯應用SQLite-3_5_8

最近拿了一塊Flysun9200-DVK2。3開發板,板子基於Atmel公司的AT91RM9200 arm處理器,內嵌arm9200T核心,主頻是180MHz。要在上面開發一個集採集、儲存、資料分析、統計管理、傳送、遠端互動等功能的小程式。由於涉及每鍾要素的儲存與統計,考慮使用SQLite。SQLite 第一

Golang在ARM/Linux平臺函式引數的傳遞

一.前言     作為一名初級的嵌入式軟體開發從業者,工作中大部分專案以C語言實現。使用C語言來編寫程式碼,通常我們可以預測到編譯生成的彙編/機器編碼的大致情況,在不同的晶片架構上,有其相應的ABI標準。而近年來逐漸流行起來的Go語言程式設計,雖然同樣語法上和C語言語法都有

在mipsel-linux平臺編譯應用SQLite-3.5.9

: "NULL");     }     printf("\n");     return 0; } int main(int argc, char **argv) {     sqlite3        *db;     char           *zErrMsg = 0;     int     

Linux平臺使用Cmake進行交叉編譯替代嵌入式平臺所使用的Makefile

 jm11.0kta1.2.zip解壓後的資料夾名為JMKTA。 JMKTA的目錄結構如下 . ├── bin │   ├── decoder.cfg │   ├── encoder_baseline.cfg │   ├── encoder.cfg │   ├── encoder_extended.cfg│ 

linux/mac平臺編譯安裝boost庫

環境:Ubuntu LTS 10.04, 64bit GCC版本: #gcc --version gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 Copyright (C) 2009 Free Software Foundation, Inc. This is free sof

vmware虛擬機器Redhat作業系統安裝arm-linux-gcc交叉編譯環境

1、下載檔案:  安裝包:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  下載地址  http://pan.baidu.com/s/1i31c3Kp  2、開始安裝(建議大家新建一個資料夾,例如:ARM),然後將檔案複製到新建的資料夾中

ARM-Linux平臺的Busybox交叉編譯

http://blog.mcuol.com/User/lyusheng/Article/4797_1.htm ARM-Linux平臺的Busybox 交叉編譯           什麼是Busybox呢?            從名字上直接理解,Busybox是一個“繁

VS2017開發Linux平臺的程序

開發環境 聯機 targe 由於 線程庫 聽說 pan 裝包 參數 重裝系統後安裝VS2015時卡住了,於是試試看VS2017怎樣,聽說還支持調Linux。發現VS2017跟12/13/15又有了新的飛躍,竟然支持模塊化下載,對於我這種主要寫C++簡直是個福音,勾了Linu

《net-snmp5.7.3移植到arm-linux平臺

b2c bash oca 創建 tran ros base embed mic net-snmp5.7.3移植到arm-linux平臺 本次交叉編譯在ubuntu 15.04 64位系統下進行。 準備工作 在編譯移植前有幾項準備工作需要完成。 1下載net-snmp 5.

Linux平臺安裝MySQL服務

table 校驗 運行 put statement procs 可靠 commands 系列 MySQL服務是一個真正的多線程、多用戶的SQL數據庫服務,憑借其高性能、高可靠和易於使用的特性,成為服務器領域中最受歡迎的開源數據庫系統。為了確保MySQL數據庫功能的完整性。可

在Windows平臺編譯ElasticFusion

最近在看ElasticFusion的文章,打算在Windows平臺上進行復現,由於涉及到眾多軟體,故在此記錄一下編譯過程,以備後續升級軟體使用。這篇主要記錄完整的Debug x64版編譯過程, 如果不想自己編譯,可直接從用我的百度雲分享,這裡也有編譯所需的全部檔案。 我的專案根目錄是D

arm-linux-gnueabihf 交叉編譯

1:下載 arm-linux-gnueabihf 下載地址: https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.1

weblogic在linux伺服器部署應用

  SSH軟體連線伺服器: 伺服器地址:xxx.xxx.xxx.40 使用者名稱:xxxx 密碼:xxxx     新建資料夾,用來放新程式碼版本,後面為程式碼版本號 路徑:/home/weblogic 命令:mkdir wzgcyth_xx

arm linux下交叉編譯gdb除錯工具

       由於嵌入式系統資源有限性,一般不能直接在目標系統上進行除錯,通常採gdb+gdbserver的方式進行除錯。Gdbserver在目標系統中執行,gdb則在宿主機上執行。要進行GDB除錯,目標系統必須包括gdbserver程式,宿主機也必須安裝gdb程式,一般li

Ubuntu14.04下arm-linux-gcc交叉編譯環境搭建

Ubuntu下arm-linux-gcc交叉編譯環境搭建 系統:Ubuntu 14.04 32bit 1、網上下載 arm-linux-gcc-4.4.3.tar.gz 2、解壓

MySQL8.0.13在Linux平臺的安裝

首先在MySQL官網上下載yum資源包:https://dev.mysql.com/downloads/repo/yum/ 安裝MySQL的版本為8.0.13 由於我的系統是Linux7 Centos,所以選擇第一個下載,下載完之後複製mysql80-community-relea

Ubuntu18.04安裝arm-linux-gcc交叉編譯工具(附arm-linux-gcc 5.4.0包)

一、下載arm-linux-gcc 5.4.0包 下載(百度雲)連結:https://pan.baidu.com/s/1AeqzkboWkJDJjU9HxtXhrA  提取碼:uzup  ------------------------------------------

Ubuntu 16.04 安裝arm-linux-gcc交叉編譯

方法一: 使用如下命令進行arm-linux-gcc的安裝: sudo apt-get install gcc-arm-linux-gnueabihf 使用如下命令進行arm-linux-g++的安裝: sudo apt-get install g++-arm-linux-gnuea

Linux(CentOS)打包應用程式RPM

在製作RPM安裝包的時候一般來講有兩種方式 1.使用RPMBUILD 使用RPMBUILD需要自己編寫*.spec檔案 2.使用CMake自帶的CPack工具 由於本人負責的專案都是使用CMake作為構建工具,所以優先考慮使有CPack作為打包工具 在

arm-linux-gdb 交叉編譯工具的安裝使用

 (3)在目標板上安裝gdbserver。(其實就是在宿主機編好了複製過去)   #cd gdb-7.2/gdb/gdbserver   #./configure --target=arm-linux --host=arm-linux(--target=arm-linux表示目標平臺,--host表示主機端執