040——移植数据库sqlite3到i.mx6ull

news2024/11/28 8:38:19

目录

一、下载

二、移植数据库

三、测试sqlite3


一、下载

SQLite Download Page

暂时先下载最新版的试试,我们以前其实在ubuntu上直接使用过

嵌入式数据库sqlite3_常见的嵌入式数据库-CSDN博客

当时我把常用的操作和怎么使用记录下来了

现在把他移植到开发板上看看行不行

二、移植数据库

        喵的这下载是真的慢呀,下了一天,挂个梯子好了。不对与其自我反思不如批判别人。中国14亿人,为啥不给搞个服务器哇。(手动狗头)

先解压看看

最上层的这些貌似是配置咋编译的我研究一下

下面这介个makefile应该是根据不同的平台来指定的。

我觉得第一步应该是执行这个config脚本来配置makefile一般来说都是这个套路

服了,文档也没说给个使用说明。

抱歉我错怪他了,原来有readme

This package contains:

 * the SQLite library amalgamation source code file: sqlite3.c
 * the sqlite3.h and sqlite3ext.h header files that define the C-language
   interface to the sqlite3.c library file
 * the shell.c file used to build the sqlite3 command-line shell program
 * autoconf/automake installation infrastucture for building on POSIX
   compliant systems
 * a Makefile.msc, sqlite3.rc, and Replace.cs for building with Microsoft
   Visual C++ on Windows

SUMMARY OF HOW TO BUILD
=======================

  Unix:      ./configure; make
  Windows:   nmake /f Makefile.msc

BUILDING ON POSIX
=================

The generic installation instructions for autoconf/automake are found
in the INSTALL file.

The following SQLite specific boolean options are supported:

  --enable-readline           use readline in shell tool   [default=yes]
  --enable-threadsafe         build a thread-safe library  [default=yes]
  --enable-dynamic-extensions support loadable extensions  [default=yes]

The default value for the CFLAGS variable (options passed to the C
compiler) includes debugging symbols in the build, resulting in larger
binaries than are necessary. Override it on the configure command
line like this:

  $ CFLAGS="-Os" ./configure

to produce a smaller installation footprint.

Other SQLite compilation parameters can also be set using CFLAGS. For
example:

  $ CFLAGS="-Os -DSQLITE_THREADSAFE=0" ./configure


BUILDING WITH MICROSOFT VISUAL C++
==================================

To compile for Windows using Microsoft Visual C++:

  $ nmake /f Makefile.msc

Using Microsoft Visual C++ 2005 (or later) is recommended.  Several Windows
platform variants may be built by adding additional macros to the NMAKE
command line.

Building for WinRT 8.0
----------------------

  FOR_WINRT=1

Using Microsoft Visual C++ 2012 (or later) is required.  When using the
above, something like the following macro will need to be added to the
NMAKE command line as well:

  "NSDKLIBPATH=%WindowsSdkDir%\..\8.0\lib\win8\um\x86"

Building for WinRT 8.1
----------------------

  FOR_WINRT=1

Using Microsoft Visual C++ 2013 (or later) is required.  When using the
above, something like the following macro will need to be added to the
NMAKE command line as well:

  "NSDKLIBPATH=%WindowsSdkDir%\..\8.1\lib\winv6.3\um\x86"

Building for UWP 10.0
---------------------

  FOR_WINRT=1 FOR_UWP=1

Using Microsoft Visual C++ 2015 (or later) is required.  When using the
above, something like the following macros will need to be added to the
NMAKE command line as well:

  "NSDKLIBPATH=%WindowsSdkDir%\..\10\lib\10.0.10586.0\um\x86"
  "PSDKLIBPATH=%WindowsSdkDir%\..\10\lib\10.0.10586.0\um\x86"
  "NUCRTLIBPATH=%UniversalCRTSdkDir%\..\10\lib\10.0.10586.0\ucrt\x86"

Building for the Windows 10 SDK
-------------------------------

  FOR_WIN10=1

Using Microsoft Visual C++ 2015 (or later) is required.  When using the
above, no other macros should be needed on the NMAKE command line.

Other preprocessor defines
--------------------------

Additionally, preprocessor defines may be specified by using the OPTS macro
on the NMAKE command line.  However, not all possible preprocessor defines
may be specified in this manner as some require the amalgamation to be built
with them enabled (see http://www.sqlite.org/compile.html). For example, the
following will work:

  "OPTS=-DSQLITE_ENABLE_STAT4=1 -DSQLITE_OMIT_JSON=1"

However, the following will not compile unless the amalgamation was built
with it enabled:

  "OPTS=-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1"

        上来就说了先config在make好好好

        我估计还得有指定编译器和目标目录的选项之前移植boa和jpeg的时候就是这种步骤。

./configure CC=arm-buildroot-linux-gnueabihf-gcc --host=arm-buildroot-linux-gnueabihf --prefix=../

不出意外的报错了

看样子不能写相对路径

哦吼果然是这个样子

makefile也出来了现在我们make试试

卡在这了不知道是编译的太慢了还是出错了

看样子是编译的太慢了。问题不大

然后make install就可以把库文件移动到刚刚指定的目录了

有点大哇就不放到我的项目里了

这个可执行文件应该是可以配合其它的描述文件进行sql的shell操作

把东西放到板子上看看

可执行文件放到bin下,其他的lib下的动态库放lib

然后忘了这个了刚刚查了一下这个是帮助链接的文件

pkg-config 是一个在 Unix-like 系统(如 Linux)中用于帮助编译器和链接器找到并使用已安装的库的工具。pkg-config 通过读取特定的 .pc(Package Config)文件来提供库的各种必要信息,如版本信息、编译和连接需要的参数等。

以下是 pkg-config 的一些主要功能和作用:

  1. 检查库的版本号pkg-config 可以检查所需库的版本是否满足要求,如果版本不满足,它会打印出错误信息,避免连接到错误版本的库文件。
  2. 获得编译预处理参数:例如宏定义和头文件的路径。这对于编译器在编译时找到正确的头文件非常重要。
  3. 获得编译参数:如库及其依赖的其他库的位置、文件名以及其他一些连接参数。这对于链接器在链接时找到正确的库文件非常重要。
  4. 自动加入所依赖的其他库的设置:当一个库依赖于其他库时,pkg-config 可以自动将这些依赖项添加到编译和链接命令中。
  5. 解决编译连接界面不统一问题:由于库文件可能安装在不同的目录下,使用 -I 和 -L 参数手动指定头文件和库文件的路径可能会导致编译命令界面的不统一。pkg-config 通过预定义的 .pc 文件来提供这些信息,从而解决了这个问题。
  6. 简化编译和链接:通过自动提供正确的编译和链接选项,pkg-config 减少了手动管理这些选项的复杂性。
  7. 便于自动化:在构建系统和脚本中,pkg-config 可以自动化地解决依赖问题,无需人工干预。

在使用 pkg-config 时,通常会通过命令行参数(如 --cflags 和 --libs)来指定需要提取的信息类型。例如,pkg-config --cflags --libs libname 命令会输出与 libname 库相关的编译和链接选项。

虽然我们交叉编译,但是在板子上也放一个好了

还有一个是share下面有个man文件看样子是用来更新man手册的

齐活了

三、测试sqlite3

ok呀,shell模式可以用了太久没用忘了咋用了哈哈

嵌入式数据库sqlite3-CSDN博客

还好以前记录的笔记还算全

下面写个测试程序看看能不能用api

先修改编译框架

不认识这些api呢

明明有哇

没链接库

没毛病

/*  
 * File name : sql.c
 * Function  : sql handle
 * Date      : 2024-05-12  
 * Version   : 0.1.0  
 */
/************************************************************************************
***************************************INCLUDE***************************************
*************************************************************************************/
#include "sql.h"
/************************************************************************************
***************************************EXTERN****************************************
*************************************************************************************/
 
int callback(void *arg, int f_num, char ** f_value, char ** f_name)
{
	int i = 0;
 
	for(i = 0; i < f_num; i++)
	{
	//	printf("%-8s %s", f_value[i], f_name[i]);
		printf("%-8s", f_value[i]);
	}
 
	printf("++++++++++++++++++++++");
	putchar(10);
 
	return 0;
}
 
int sql_test()
{
	sqlite3 *db;
	char *errmsg;//errmsg是一个二级指针,定义一个一级指针取地址。
	char sql[128];
	if(sqlite3_open(DATABASE, &db) != SQLITE_OK)
	{
		printf("%s\n", sqlite3_errmsg(db));
		return -1;
	}
	else
	{
		printf("open DATABASE success.\n");
	}
 
	if(sqlite3_exec(db, "create table if not exists xty(id int, device char , data char);",NULL, NULL, &errmsg) != SQLITE_OK)//分号可加可不加
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Create or open table success.\n");
	}
	sprintf(sql, "insert into xty values(%d, '%s', '%s')", 1, "gps", "001");
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Insert done.\n");
	}
    sprintf(sql, "select count(*) from xty where name='gps';");
	if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)
	{
		printf("%s", errmsg);
	}
	else
	{
		printf("select done.\n");
	}
	return 0;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1668510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SamFirm Reborn 0.3.6.8三星固件下载器 汉化版

介绍 在三星手机的维护和升级过程中&#xff0c;固件的获取往往成为了一个难题。幸运的是&#xff0c;有一群热爱技术的开发者们&#xff0c;他们开发了各种工具以简化这个过程。今天&#xff0c;我们要介绍的是一款名为SamFirm Reborn 0.3.6.8的三星固件下载器的汉化版。它旨在…

Java8 ConcurrentHashMap 存储、扩容源码阅读

文章目录 1. 概述2. 入门实例3. 属性4. 核心方法4.1 put4.2 initTable4.3 transfer4.4 sizeCtl4.5 sizeCtl bug 1. 概述 ConcurrentHashMap 是线程安全且高效的 HashMap。 HashMap 可以看下我这篇 传送门 。 2. 入门实例 public class MyStudy {public static void main(St…

什么是数据平台——企业构建Data+AI的基础数据底座需要的决策参考

什么是数据平台 标准的解释是这样的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 数据平台是指将各类数据进行整合、存储、处…

实现字符串比较函数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, result;char s1[100], s2[100];//填充数组&#xff1b;printf("请输入数组s1的…

Docker 直接运行一个 Alpine 镜像

由于镜像很小&#xff0c;下载时间往往很短&#xff0c;读者可以直接使用 docker run 指令直接运行一个 Alpine 容器&#xff0c;并指定运行的 Linux 指令&#xff0c;例如&#xff1a; PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

docker八大架构之应用数据分离架构

数据分离架构 什么是数据分离架构&#xff1f; 数据分离架构是指应用服务&#xff08;应用层&#xff09;和数据库服务&#xff08;数据层&#xff09;使用不同的服务器来进行操作&#xff0c;如下边的两个图所示。当访问到应用层后&#xff0c;如果需要获取数据会进行访问另…

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…

基于STM32的风量控制器的Proteus仿真

文章目录 一、风量控制器1.题目要求2.思路3.仿真图4.仿真程序4.1 程序说明4.2 主函数4.2 OLED显示函数4.3 按键函数 三、总结 一、风量控制器 1.题目要求 设计一个可以风量控制器进行通信的控制板&#xff0c;该控制板由1块OLED显示屏和8个物理按键组成&#xff0c;其中显示屏…

落雪音乐 超好用的桌面端音乐播放器

之前一直都是充某Q音乐的会员&#xff0c;突然不想氪金了&#xff0c;终于找到一个开源的音乐播放器&#xff0c;在此先给落雪无痕大佬跪了 太爱了 简直白嫖怪的福音 话不多说&#xff0c;直接上操作&#xff1a;解压密码&#xff1a;www.1234f.com下载地址&#xff1a;极速云…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码&#xff08;采用epoll实现服务器&#xff09;整体框架main函数init_listen_fd函数&#xff08;负责对lfd初始化的那一系列操作&#xff09;epoll_run函数do_accept函数do_read函数内容补充&#xff1a;http中的getline函数 详解do_re…

DE2-115开发板基于verilog和nioⅡ的流水灯实现

目录 一、 内容概要二、 实现2.1 基于Nios II软核的流水灯2.1.1 准备工作2.1.2 工程搭建2.1.3 硬件代码设计Ⅰ 连接IP核Ⅱ 编写代码Ⅲ 各种配置 2.1.4 软件代码设计Ⅰ 环境构建Ⅱ 编写代码 2.1.5 代码下载Ⅰ 硬件下载Ⅱ 软件下载 2.1.6 运行结果 2.2 Verilog流水灯 三、 心得体…

LORA学习笔记2——训练集处理

前言 对于ai训练来说&#xff0c;处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例&#xff0c;记录下训练集处理的流程和一些心得。 素材准备 素材准备有以下几个需要注意的点&#xff1a; 通常训练二次元角色需要30张以上的…

栈和队列(栈的详解)

目录 栈栈的实现栈的结构栈的初始化栈的销毁入栈出栈获取栈顶元素栈的判空获取栈的数据个数test.c(测试)总结 栈 栈也是线性表&#xff08;在逻辑上是顺序存储&#xff09;的一种&#xff0c;栈只允许其在固定的一端进行插入和删除&#xff0c;栈中的元素遵循后进先出&#xf…

Linux-笔记 开发板Uboot命令使用

将之前自学的知识整理了一下笔记&#xff0c;以便回忆 信息查询命令 1、help/?&#xff1a;查看所支持命令 > ? md md - memory displayUsage: md [.b, .w, .l] address [# of objects]2、bdinfo&#xff1a;查询板子信息 > bdinfo arch_number 0x00000000 boot_p…

多商户Docker Supervisor进程管理器部署

Dockerfile 根目录下没有Dockerfile的可以复制下面的命令 # 使用基础镜像 FROM leekay0218/crmeb-mer## 复制代码 ## 在本地调试注释掉&#xff0c;使用映射把文件映射进去 #ADD ./ /var/www# 设置工作目录 WORKDIR /var/www# 设置时区为上海 ENV TZAsia/Shanghai RUN ln -sn…

对数据进行标准化和归一化

数据的形式&#xff1a;保存在CSV中&#xff0c;第一列为姓名&#xff0c;第二列之后为特征。 标准化 输入文件的路径&#xff0c;设置保存转化后的文件路径 import pandas as pd from sklearn.preprocessing import StandardScaler# 读取CSV文件 data pd.read_csv(rC:\User…

开发时如何快速分析代码和生成测试方法(Baidu Comate插件帮我一键分析)

目录 前言 Baidu Comate智能编码助手简介 安装教程 使用RabbitMQ一个绑定队列方法进行演示 进行测试现有功能 使用感觉 测试结果 前言 因为在开发代码的时候&#xff0c;发现有很多都是废话也不是很想写注释 的&#xff0c;毕竟程序员最讨厌的两件事情&#xff0c;一…

Hikyuu高性能量化研究框架助力探索

Hikyuu Quant Framework 是一款基于C/Python的开源量化交易分析与研究工具&#xff0c;主要用于A股市场的交易策略分析与回测&#xff0c;目前不支持期货等&#xff0c;需要自行改造。 Hikyuu的目标 Hikyuu的最初目的是为了快速对A股全市场股票进行策略回测和验证&#xff0c…

windows窗口消息队列与消息过程处理函数

在Windows窗口应用程序中&#xff0c;消息队列和窗口过程函数是实现消息驱动机制的核心组件。 消息队列&#xff08;Message Queue&#xff09;&#xff1a; 消息队列是用于存储窗口消息的缓冲区。当用户与应用程序交互时&#xff0c;系统会将生成的消息插入到消息队列中&…

C++11:常用语法汇总

目录 &#x1f341;统一的列表初始化 { }initializer_list &#x1f341;decltype 推导表达式类型&#x1f341;可变参数模板解析可变参数包方法一方法二 &#x1f341;lambda 表达式捕捉列表的使用运用场景举例lambda表达式 与 函数对象 &#x1f341;统一的列表初始化 { } 在…