当前位置: 首页 > news >正文

交叉编译 手动安装 SQLite 库 移植ARM

# 下载源码
wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar -xzf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000





cd /home/lxh/sqlite-autoconf-3420000
make distclean   //清除下,因为我安装失败过。
./configure --host=arm-linux-gnueabihf \
--prefix=/home/lxh/arm-libs/install \
CFLAGS="-Os"

make -j$(nproc)


make install



检查生成的库文件
:ls -lh /home/lxh/arm-libs/install/lib/libsqlite3.*

#include "sqlite_query.h"
#include <stdio.h>
#include <stdlib.h>
#include "/usr/include/sqlite3.h"// 查询结果回调函数类型定义
typedef int (*QueryCallback)(void *data, int argc, const char **argv, const char **col_name);int query_aircraft_by_icao(const char *db_path,const char *icao,QueryCallback callback,void *user_data);int query_aircraft_by_icao(const char *db_path,const char *icao,QueryCallback callback,void *user_data)
{sqlite3 *db;int rc;rc = sqlite3_open(db_path, &db);if (rc != SQLITE_OK){fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));return rc;}const char *sql = "SELECT * FROM aircraft_data WHERE icao = ?;";sqlite3_stmt *stmt;rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);if (rc != SQLITE_OK){fprintf(stderr, "准备SQL失败: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return rc;}sqlite3_bind_text(stmt, 1, icao, -1, SQLITE_STATIC);while ((rc = sqlite3_step(stmt)) == SQLITE_ROW){int col_count = sqlite3_column_count(stmt);const char **argv = (const char **)malloc(col_count * sizeof(const char *));const char **col_name = (const char **)malloc(col_count * sizeof(const char *));for (int i = 0; i < col_count; i++){col_name[i] = sqlite3_column_name(stmt, i);argv[i] = (const char *)sqlite3_column_text(stmt, i);}if (callback){callback(user_data, col_count, argv, col_name);}free((void *)argv);free((void *)col_name);}if (rc != SQLITE_DONE){fprintf(stderr, "查询执行错误: %s\n", sqlite3_errmsg(db));}sqlite3_finalize(stmt);sqlite3_close(db);return (rc == SQLITE_DONE) ? SQLITE_OK : rc;
}static int print_result(void *data, int argc, const char **argv, const char **col_name)
{printf("----- 找到记录 -----\n");for (int i = 0; i < argc; i++){printf("%-12s: %s\n", col_name[i], argv[i] ? argv[i] : "NULL");}return 0;
}int main()
{const char *db_path = "/usr/local/test/radardata.db";const char *icao = "780CAF";printf("正在查询 ICAO: %s...\n", icao);int ret = query_aircraft_by_icao(db_path, icao, print_result, NULL);if (ret != SQLITE_OK){fprintf(stderr, "查询失败 (错误码: %d)\n", ret);return 1;}return 0;
}
# 工具链设置(如果是交叉编译,取消下面两行注释)
# CROSS_COMPILE = arm-linux-gnueabihf-
# CC = $(CROSS_COMPILE)g++# 如果是本地编译,使用g++
CC = arm-linux-gnueabihf-gcc
CURL_DIR = /home/lxh/arm-libs/install
# 编译选项
CFLAGS =-I$(CURL_DIR)/include -I. -g -Wall
LDFLAGS =-L$(CURL_DIR)/lib  -lsqlite3 -lpthread# 目标文件
TARGET = sqlite_query
SRCS = sqlite_query.cpp 
OBJS = $(SRCS:.cpp=.o)# 默认目标
all: $(TARGET)# 主目标
$(TARGET): $(OBJS)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)# 生成.o文件
%.o: %.cpp$(CC) $(CFLAGS) -c $< -o $@# 清理
clean:rm -f $(OBJS) $(TARGET)# 运行测试
run: $(TARGET)./$(TARGET)# 数据库查看
db:sqlite3 radardata.db ".schema"sqlite3 radardata.db "SELECT * FROM aircraft_data;"

http://www.dtcms.com/a/335659.html

相关文章:

  • 基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
  • JavaScript 性能优化实战大纲
  • 记SpringBoot3.x + Thymeleaf 项目实现(MVC架构模式)
  • .NET 中的延迟初始化:Lazy<T> 与LazyInitializer
  • 【Java后端】MyBatis-Plus 原理解析
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】了解.Net
  • Linux | i.MX6ULL网络通信-套字节 UDP(第十八章)
  • 【牛客刷题】后缀子串字母统计:O(n)高效算法详解
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • 数学建模 15 逻辑回归与随机森林
  • 大上墨水屏显示器Paperlike253 Mac 特别版 使用体会
  • MySQL数据库初识
  • 黑马java八股文全集
  • AUTOSAR ARXML介绍
  • 数据结构(排序篇)——七大排序算法奇幻之旅:从扑克牌到百亿数据的魔法整理术
  • C++编程实战:高效解决算法与数据结构问题
  • 【CV 目标检测】Fast RCNN模型②——算法流程
  • 【递归、搜索与回溯算法】记忆化搜索
  • 图解希尔排序C语言实现
  • 分治-归并-315.计算右侧小于当前元素的个数-力扣(LeetCode)
  • Java基础 8.17
  • Debug马拉松:崩溃Bug的终极挑战
  • 一起Oracle 19c bug 导致的业务系统超时问题分析
  • JUC常用线程辅助类详解
  • Blender模拟结构光3D Scanner(二)投影仪内参数匹配
  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • (一)React企业级后台(Axios/localstorage封装/动态侧边栏)
  • 【React 性能】性能优化第一课:搞懂 `React.memo`, `useCallback`, `useMemo`
  • 重学React(六):脱围机制二
  • Spark03-RDD02-常用的Action算子