当前位置: 首页 > 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.lryc.cn/news/623800.html

相关文章:

  • Python数据分析案例82——基于机器学习的航空公司满意度分析
  • 攻防世界—unseping(反序列化)
  • pytorch线性回归
  • (一)React企业级后台(Axios/localstorage封装/动态侧边栏)
  • iSCSI服务配置全指南(含服务器与客户端)
  • JMeter(进阶篇)
  • LeetCode算法日记 - Day 13: 前缀和、二维前缀和
  • es下载、安装、部署以及集成和mysql数据同步
  • **守护进程(Daemon)** 是一种在后台运行的特殊进程
  • 为什么神经网络在长时间训练过程中会存在稠密特征图退化的问题
  • Linux中聚合链路与软件网桥配置指南
  • 深入了解linux系统—— 线程控制
  • AI 编程在老项目中的困境与改进方向
  • 【Linux | 网络】高级IO
  • 63.不同路径
  • 分治-归并-315.计算右侧小于当前元素的个数-力扣(LeetCode)
  • C++ vector的使用
  • C语言(12)——进阶函数
  • 北京JAVA基础面试30天打卡12
  • 语音转文字,如何提升内容创作效率?
  • 智能汽车领域研发,复用云原始开发范式?
  • WebSocket--精准推送方案(二):实时消息推送-若依项目示例
  • 在职老D渗透日记day19:sqli-labs靶场通关(第26a关)get布尔盲注 过滤or和and基础上又过滤了空格和注释符 ‘)闭合
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十一节:网关安全-对称与非对称加密
  • 告别“测试滞后”:AI实时测试工具在敏捷开发中的落地经验
  • 【165页PPT】锂电池行业SAP解决方案(附下载方式)
  • 自动驾驶中的传感器技术34——Lidar(9)
  • 定时器中断点灯
  • 记一次安装OpenStack(Stein)-nova报错问题解决
  • 42 C++ STL模板库11-容器4-forward_list