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

目录

一、下载

二、移植数据库

三、测试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-languageinterface 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 POSIXcompliant systems* a Makefile.msc, sqlite3.rc, and Replace.cs for building with MicrosoftVisual C++ on WindowsSUMMARY OF HOW TO BUILD
=======================Unix:      ./configure; makeWindows:   nmake /f Makefile.mscBUILDING 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" ./configureto produce a smaller installation footprint.Other SQLite compilation parameters can also be set using CFLAGS. For
example:$ CFLAGS="-Os -DSQLITE_THREADSAFE=0" ./configureBUILDING WITH MICROSOFT VISUAL C++
==================================To compile for Windows using Microsoft Visual C++:$ nmake /f Makefile.mscUsing 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=1Using 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=1Using 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=1Using 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=1Using 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.rhkb.cn/news/325688.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android11 InputManagerService启动流程分析

InputManagerService在systemserver进程中被启动 //frameworks\base\services\java\com\android\server\SystemServer.java t.traceBegin("StartInputManagerService"); inputManager new InputManagerService(context);//1 t.traceEnd(); //省略 //注册服务 Servi…

C++11:常用语法汇总

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

2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付

简介&#xff1a; 2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付 图片&#xff1a; 源码下载

【Python从入门到进阶】54、使用Python轻松操作SQLite数据库

一、引言 1、什么是SQLite SQLite的起源可以追溯到2000年&#xff0c;由D. Richard Hipp&#xff08;理查德希普&#xff09;所创建。作为一个独立的开发者&#xff0c;Hipp在寻找一个能够在嵌入式系统中使用的轻量级数据库时&#xff0c;发现现有的解决方案要么过于庞大&…

并发-守护线程setDaemon()

目录 为什么存在 什么是守护线程 创建守护线程 在使用守护线程时需要注意以下几点 可以使用isDaemon()方法来检查线程是否是守护线程 例1&#xff1a;上面提到当JVM中只剩下守护线程的时候&#xff0c;JVM就会退出&#xff0c;那么写段代码测试下 例2&#xff1a;thread…

练习队列的相关操作:循环队列

1. 思路解析 循环队列就是在只有有限的空间时使用队列实现循环存储数据&#xff0c;有双向链表和数组两种选择&#xff0c;这里我们使用数组实现循环队列&#xff08;因为链表我不会 >-<&#xff09; 2. 相关函数及其实现 2.1 判空与判满 判空&#xff1a;直接返回头尾…

docker(四):数据卷

数据卷 卷的设计目的就是数据的持久化&#xff0c;完全独立于容器的生存周期&#xff0c;因此Docker不会在容器删除时删除其挂载的数据卷。 1、docker run docker run -it --privilegedtrue -v /宿主机绝对路径目录:/容器内目录 镜像名2、挂载注意事项 --privilegedtru…

【C++】二叉搜索树(手撕插入、删除、寻找)

一、什么是二叉搜索树 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左…

OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

实质问题是报错&#xff1a;caffe2_detectron_ops.dll“ or one of its dependencies 还需要安装一个包&#xff1a; pip install intel-openmp 安装之后顺利测试通过。

Tomcat7+ 弱口令 后台getshell漏洞

1 漏洞背景 Tomcat 是一个流行的开源Web应用服务器&#xff0c;用于部署和运行Java Web应用程序。Tomcat 7 版本中存在一个安全隐患&#xff0c;即默认的管理员密码可能较弱或者未被修改&#xff0c;攻击者可以利用这一漏洞登录到Tomcat的管理后台&#xff0c;并上传恶意的WAR…

LeetCode100题总结

LeetCode100题总结 前言LeetCode100题总结题型梳理双指针11. 盛最多水的容器234.回文链表75.颜色分类206.反转链表142.环形链表215.三数之和 滑动窗口3. 无重复字符的最长子串209. 长度最小的子数组438. 找到字符串中所有字母异位词 广搜102. 二叉树的层序遍历200. 岛屿数量617…

轮转数组 与 消失的数字

轮转数组 思路一 创建一个新内存空间&#xff0c;将需轮转的数依次放入&#xff0c;之后在把其它数放入 代码&#xff1a; void rotate(int* nums, int numsSize, int k) {k k % numsSize;// 确定有效的旋转次数if(k 0)return;int* newnums (int*)malloc(sizeof(int) * nu…

2024数据分析管理、数字经济与教育国际学术会议(ICDAMDEE2024)

2024数据分析管理、数字经济与教育国际学术会议(ICDAMDEE2024) 会议简介 2024年数据分析管理、数字经济和教育国际学术会议&#xff08;ICDAMDEE 2024&#xff09;将在武汉举行。会议不仅展示了来自世界各地的研究专家围绕数据分析管理、数字经济和教育的最新科研成果&#xf…

纯血鸿蒙APP实战开发——Grid和List内拖拽交换子组件位置

Grid和List内拖拽交换子组件位置 介绍 本示例分别通过onItemDrop()和onDrop()回调&#xff0c;实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明&#xff1a; 拖拽Grid中子组件&#xff0c;到目标Grid子组件位置&#xff0c;进行两者位置互换。拖拽List中子…

【项目实战】使用Yolov8 + tesseract 实现身份证信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于实验,毕业设计参考等。整体效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录 一 数据集制作

Omnity 进展月报 | 2024.4.1-4.30

Omnity 大事摘要 1、Octopus 官宣升级为 Omnity。 2、Omnity 4月28号正式上线&#xff0c;实现BTC 和 ICP 之间跨链转账 Runes 资产。 3、为庆祝上线&#xff0c;以符文 HOPE•YOU•GET•RICH 为资产&#xff0c;发红包快速触达大量用户&#xff0c;体验跨链服务。 4、Omni…

你知道C++多少——默认成员函数

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

Vulstack红队评估(一)

文章目录 一、环境搭建1、网络拓扑2、web服务器(win7)配置3、域控&#xff08;winserver2008&#xff09;配置4、域内机器&#xff08;windows 2003&#xff09;配置5、调试网络是否通常 二、web渗透1、信息搜集2、端口扫描3、目录扫描4、弱口令5、phpmyadmin getshell日志gets…

Android 开机启动扫描SD卡apk流程源码分析

在开机的时候&#xff0c;装在SD卡的apk和装在系统盘的apk扫描过程不一样&#xff0c;系统盘apk在系统启动过程中扫描&#xff0c;而SD卡上的就不是&#xff0c;等系统启动好了才挂载、扫描&#xff0c;下面就说下SD扫描的流程&#xff1a; 在SystemServer启动MountService&am…

ARM架构安全特性之防御执行技术

安全之安全(security)博客目录导读 目录 1、侧信道攻击威胁 2、推测屏障Speculation Barriers 3、栈溢出攻击威胁 4、指针认证PAC 5、分支目标识别BTI 6、内存安全违规威胁 7、内存标记扩展MTE 8、加强数据保护 9、特权不可访问&#xff08;Privileged Access Never …