Sqlite3交叉編譯全過程

Sqlite3交叉編譯全過程

  • 一、概述
  • 二、下載
  • 三、解壓
  • 四、配置
  • 五、編譯
  • 六、安裝
  • 七、驗證文件類型
  • 八、移植
    • 8.1、頭文件sqlite3.h
    • 8.2、動態鏈接庫移植
    • 8.3、靜態態鏈接庫移植
  • 九、驗證使用
    • 9.1. 關鍵函數說明
  • 十、觸發器使用
  • 十一、sqlite表清空且恢復id值
  • 十二、全文總結

一、概述

SQLite 是一個輕量級的嵌入式數據庫,廣泛應用于嵌入式系統開發中。交叉編譯 SQLite 是將 SQLite 編譯為目標平臺(如 ARM 架構的嵌入式設備)可運行的版本。本文將詳細介紹如何在 Linux 環境下交叉編譯 SQLite,并驗證其在目標平臺上的使用。

二、下載

下載鏈接 https://www.sqlite.org/download.html
在這里插入圖片描述

三、解壓

tar xvzf sqlite-autoconf-3390300.tar.gz

在這里插入圖片描述

四、配置

i.M6ull

cd sqlite-autoconf-3390300/
./configure --host=arm-none-linux-gnueabi --prefix=/home/leo/linux/sqlite-arm/build

全志T3

cd sqlite-autoconf-3390300/
./configure --host=arm-linux-gnueabihf --prefix=/mnt/hgfs/VMShare/T3/sqlite3/build

通過指定編譯器的前綴:arm-linux-gnueabihf
只需要修改configure的配置參數即可

CC = /home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain/bin/arm-linux-gnueabihf-gcc

或者添加到環境變量:
由于交叉編譯器已經安裝在/home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain/bin目錄下,并且已經把/home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain/bin目錄添加到/etc/profile文件中,所以在控制臺中可以直接調用編譯器。
在這里插入圖片描述

五、編譯

make

在這里插入圖片描述

如何指定交叉編譯器?

make PREFIX=/mnt/hgfs/VMShare/T3/sqlite3/build CC=/home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain/bin/arm-linux-gnueabihf-gcc

六、安裝

make install

在這里插入圖片描述

七、驗證文件類型

cd sqlite-arm/build/bin/
file sqlite3sqlite3: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=a0fe1c9b0f059e7ff8ac222d477b006e5c7167cd, not stripped

在這里插入圖片描述

八、移植

8.1、頭文件sqlite3.h

cd sqlite-arm/build/include/
ls
sqlite3ext.h  sqlite3.h

8.2、動態鏈接庫移植

將.so文件移植到開發板

8.3、靜態態鏈接庫移植

將.a文件移植到程序文件,直接調用編譯到程序中
在這里插入圖片描述

九、驗證使用

#include <stdio.h>
#include <sqlite3.h>int main() {sqlite3 *db;          // 數據庫句柄char *err_msg = NULL; // 錯誤信息int rc;               // 返回碼// 打開或創建數據庫rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK) {fprintf(stderr, "無法打開數據庫: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}// 創建表const char *create_table_sql = "CREATE TABLE IF NOT EXISTS users (""id INTEGER PRIMARY KEY,""name TEXT NOT NULL,""age INTEGER);";rc = sqlite3_exec(db, create_table_sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL 錯誤: %s\n", err_msg);sqlite3_free(err_msg);sqlite3_close(db);return 1;}// 插入數據const char *insert_sql = "INSERT INTO users (name, age) VALUES ('Alice', 25);""INSERT INTO users (name, age) VALUES ('Bob', 30);";rc = sqlite3_exec(db, insert_sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL 錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 查詢數據(回調函數)int callback(void *data, int argc, char **argv, char **col_name) {for (int i = 0; i < argc; i++) {printf("%s = %s\n", col_name[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;}const char *select_sql = "SELECT * FROM users;";rc = sqlite3_exec(db, select_sql, callback, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL 錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 更新數據const char *update_sql = "UPDATE users SET age = 26 WHERE name = 'Alice';";rc = sqlite3_exec(db, update_sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL 錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 刪除數據const char *delete_sql = "DELETE FROM users WHERE name = 'Bob';";rc = sqlite3_exec(db, delete_sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL 錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 關閉數據庫sqlite3_close(db);return 0;
}

9.1. 關鍵函數說明

1、 sqlite3_open(const char *filename, sqlite3 **ppDb)
打開數據庫文件,若不存在則創建。
返回 SQLITE_OK 表示成功。

2、sqlite3_exec(sqlite3 *db, const char *sql, callback, void *data, char **errmsg)
執行 SQL 語句。
callback 函數用于處理查詢結果(見示例中的回調函數)。

3、sqlite3_close(sqlite3 *db)
關閉數據庫連接。

4、錯誤處理
使用 sqlite3_errmsg(db) 獲取錯誤信息。
釋放錯誤消息內存:sqlite3_free(err_msg)。

十、觸發器使用

9.1、當設定觸發器后,修改過表名,由于觸發器內寫的表名是修改之前的,所有在觸發器中的操作會使得操作失敗
在這里插入圖片描述

觸發器
在這里插入圖片描述

修改觸發器后解決問題。

十一、sqlite表清空且恢復id值

只需要清空表格;然后將sqlite_sequence表中對應表格的seq置為0;也可以直接把sqlite_sequenc中對應表名的記錄刪除掉。

十二、全文總結

本文詳細介紹了 SQLite 的交叉編譯過程,包括環境準備、源碼下載、配置、編譯、驗證、移植和使用。通過本文的步驟,讀者可以在 Linux 環境下成功交叉編譯 SQLite,并將其移植到目標嵌入式平臺。此外,本文還介紹了 SQLite 的基本使用方法,包括數據庫操作、觸發器使用和表清空操作。希望本文能為嵌入式開發人員提供有價值的參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77963.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟考軟件設計師考試情況與大綱概述

文章目錄 **一、考試科目與形式****二、考試大綱與核心知識點****科目1&#xff1a;計算機與軟件工程知識****科目2&#xff1a;軟件設計** **三、備考建議****四、參考資料** 這是一個系列文章的開篇 本文對2025年軟考軟件設計師考試的大綱及核心內容進行了整理&#xff0c;并…

【數學建模】孤立森林算法:異常檢測的高效利器

孤立森林算法&#xff1a;異常檢測的高效利器 文章目錄 孤立森林算法&#xff1a;異常檢測的高效利器1 引言2 孤立森林算法原理2.1 核心思想2.2 算法流程步驟一&#xff1a;構建孤立樹(iTree)步驟二&#xff1a;構建孤立森林(iForest)步驟三&#xff1a;計算異常分數 3 代碼實現…

【Android面試八股文】Android系統架構【一】

Android系統架構圖 1.1 安卓系統啟動 1.設備加電后執行第一段代碼&#xff1a;Bootloader 系統引導分三種模式&#xff1a;fastboot&#xff0c;recovery&#xff0c;normal&#xff1a; fastboot模式&#xff1a;用于工廠模式的刷機。在關機狀態下&#xff0c;按返回開機 鍵進…

jvm-獲取方法簽名的方法

在Java中&#xff0c;獲取方法簽名的方法可以通過以下幾種方式實現&#xff0c;具體取決于你的需求和使用場景。以下是詳細的介紹&#xff1a; 1. 使用反射 API Java 提供了 java.lang.reflect.Method 類來獲取方法的相關信息&#xff0c;包括方法簽名。 示例代碼&#xff1a…

DeepSeek和Excel結合生成動態圖表

文章目錄 一、前言二、3D柱狀圖案例2.1、pyecharts可視化官網2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、動態調整數據 一、前言 最近在找一些比較炫酷的動態圖表&#xff0c;用于日常匯報&#xff0c;于是找到了 DeepseekExcel王牌組合&#xff0c;其等同于動態圖…

探索 .bat 文件:自動化任務的利器

在現代計算機操作中&#xff0c;批處理文件&#xff08;.bat 文件&#xff09;是一種簡單而強大的工具&#xff0c;它可以幫助我們自動化重復性任務&#xff0c;工作效率提高。盡管隨著編程語言和腳本工具的發展&#xff0c;.bat 文件的使用頻率有所下降&#xff0c;但它依然是…

PyTorch與自然語言處理:從零構建基于LSTM的詞性標注器

目錄 1.詞性標注任務簡介 2.PyTorch張量&#xff1a;基礎數據結構 2.1 張量創建方法 2.2 張量操作 3 基于LSTM的詞性標注器實現 4.模型架構解析 5.訓練過程詳解 6.SGD優化器詳解 6.1 SGD的優點 6.2 SGD的缺點 7.實用技巧 7.1 張量形狀管理 7.2 廣播機制 8.關鍵技…

【C++】特殊類的設計、單例模式以及Cpp類型轉換

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f310; C 語言 上篇文章&#xff1a; C 智能指針使用&#xff0c;以及shared_ptr編寫 下篇文章&#xff1a; C IO流 目錄 特殊類的設…

探索 Flowable 后端表達式:簡化流程自動化

什么是后端表達式&#xff1f; 在 Flowable 中&#xff0c;后端表達式是一種強大的工具&#xff0c;用于在流程、案例或決策表執行期間動態獲取或設置變量。它還能實現自定義邏輯&#xff0c;或將復雜邏輯委托…… 后端表達式在 Flowable 的后端運行&#xff0c;無法訪問前端…

【Lua】Lua 入門知識點總結

Lua 入門學習筆記 本教程旨在幫助有編程基礎的學習者快速入門Lua編程語言。包括Lua中變量的聲明與使用&#xff0c;包括全局變量和局部變量的區別&#xff0c;以及nil類型的概念、數值型、字符串和函數的基本操作&#xff0c;包括16進制表示、科學計數法、字符串連接、函數聲明…

符號速率估計——小波變換法

[TOC]符號速率估計——小波變換法 一、原理 1.Haar小波變換 小波變換在信號處理領域被成為數學顯微鏡&#xff0c;不同于傅里葉變換&#xff0c;小波變換可以觀測信號隨時間變換的頻譜特征&#xff0c;因此&#xff0c;常用于時頻分析。 ??當小波變換前后位置處于同一個碼元…

android contentProvider 踩坑日記

寫此筆記原因 學習《第一行代碼》到第8章節實現provider時踩了一些坑&#xff0c;因此記錄下來給后來人和自己一個提示&#xff0c;僅此而已。 包含內容 Sqlite數據庫CURD內容provider界面provider項目中書籍管理provider實現邏輯用adb shell確認providercontentResolver接收…

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注冊中心2.CAP理論3.常見的注冊中心 二.Eureka介紹1.搭建Eureka Server 注冊中心2.搭建服務注冊3.服務發現 三.負載均衡LoadBalance1.問題引入2.服務端負載均衡3.客戶端負載均衡4.Spring Cloud LoadBalancer1).快速上手2)負載均衡策…

【開關電源】關于GaN反激電源開關噪聲

文章目錄 0 前言1 設計信息1.1 設計需求1.2 原理圖1.3 電源表現 2 原因分析3 橫向對比TI UCG28826 &#xff08;GaN&#xff09;采購的普通QR反激變換器 4 總結 0 前言 筆者原計劃設計一款省電的&#xff0c;效率尚可的&#xff0c;穩定的2路輸出反激電源&#xff0c;用于系統…

DOCA介紹

本文分為兩個部分&#xff1a; DOCA及BlueField介紹如何運行DOCA應用&#xff0c;這里以DNS_Filter為例子做大致介紹。 DOCA及BlueField介紹&#xff1a; 現代企業數據中心是軟件定義的、完全可編程的基礎設施&#xff0c;旨在服務于跨云、核心和邊緣環境的高度分布式應用工作…

mybatis mapper.xml中使用枚舉

重點&#xff1a;application.propertis配置類 #TypeEnumHandler 這個類的包名&#xff0c;不是全路徑 mybatis.type-handlers-packagecom.fan.test.handler兩個枚舉類&#xff1a; public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鴻蒙生態:鴻蒙生態校園行心得

&#xff08;個人觀點&#xff0c;僅供參考&#xff09; 兄弟們&#xff0c;今天來淺淺聊一聊這次的設立在長沙的鴻蒙生態行活動。 老樣子&#xff0c;我們先來了解一下這個活動&#xff1a; &#xff28;&#xff41;&#xff52;&#xff4d;&#xff4f;&#xff4e;&#x…

【速寫】多LoRA并行衍生的一些思考

遷移學習上的一個老問題&#xff0c;怎么做多領域的遷移&#xff1f;以前的邏輯認為領域遷移屬于是對參數做方向性的調整&#xff0c;如果兩個領域方向相左&#xff0c;實際上不管怎么加權相加都是不合理的。 目前一些做法想著去觀察LoRA權重矩陣中的稠密塊與稀疏塊&#xff0…

【Delphi 基礎知識 44】接口interface的應用

目錄 1. 前言2. 接口有哪些優勢2.1. 實現多態性2.2 實現多重(解決單繼承限制)2.3 解耦代碼(依賴注入)2.4 便于測試(模擬接口)2.5 跨語言互操作性(COM支持)1. 前言 總結為一句話就是:接口只告訴你要做什么,而類會告訴你應該怎么做 下面是最簡單的接口實現 typeIMyIn…

09.傳輸層協議 ——— TCP協議

文章目錄 TCP協議 談談可靠性TCP協議格式 序號與確認序號窗口大小六個標志位 確認應答機制&#xff08;ACK&#xff09;超時重傳機制連接管理機制 三次握手四次揮手 流量控制滑動窗口擁塞控制延遲應答捎帶應答面向字節流粘包問題TCP異常情況TCP小結基于TCP的應用層協議 TCP協…