目录

1 下载lazarus

2 下载sqlite3源码编译生成库文件

3 新建项目

4 设置并编译


一次极简单的测试,记录一下。

操作系统:统信UOS,

内核:4.19.0-arm64-desktop

处理器:D3000

整个流程难点是生成so库文件并正确加载。从别的地方复制过来的so文件都不行,反复加载测试都失败。

以下是操作步骤:

1 下载lazarus

使用秋风定制的lazarus,全面支持常用操作系统,常见国产CPU。自己写的FPC/Lazarus安装程序(2025-06-24 v0.5.9.0下载) - 秋·风 - 博客园

安装说明非常详细,按照说明完成编译安装。

2 下载sqlite3源码编译生成库文件

SQLite Download Page

下载了 sqlite-amalgamation-3500100,编译生成 libsqlite3.so

建一个存放编译生成程序的文件夹,例如数据盘中,bin/

上面的so文件保存在 bin/sys/ 

3 新建项目

窗体很简单,form中只有一个按钮。

代码:

unit Unit1;{$mode objfpc}{$H+}interfaceusesClasses, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,SQLite3Conn, SQLDB, dynlibs, sqlite3dyn;type{ TForm1 }TForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);privateprocedure ConnectDB;publicend;varForm1: TForm1;implementation{$R *.lfm}procedure TForm1.Button1Click(Sender: TObject);
beginConnectDB;
end;procedure TForm1.ConnectDB;
varConn: TSQLite3Connection;Trans: TSQLTransaction;DBPath, LibPath, LibName: String;xOK:Integer;
begin// 1. 确定库文件名{$IFDEF WINDOWS}LibName := 'sqlite3.dll';{$ENDIF}{$IFDEF LINUX}LibName := 'libsqlite3.so';{$ENDIF}{$IFDEF DARWIN}LibName := 'libsqlite3.dylib';{$ENDIF}// 2. 构建库文件路径LibPath := ConcatPaths([ExtractFilePath(ParamStr(0)),'sys',LibName]);// 3. 验证库文件是否存在if not FileExists(LibPath) thenbeginShowMessage('SQLite 库文件不存在:' + LineEnding + LibPath);Exit;end;// 4. 加载库文件xOK:=sqlite3dyn.InitializeSqlite(LibPath);if xOK=0 thenbeginshowmessage('ERROR: ' + LibName +' NOT Loaded');exit;end elsebeginshowmessage( LibName + ' Loaded OK');end;// 5. 构建数据库路径DBPath := ConcatPaths([ExtractFilePath(ParamStr(0)),'data','test.db']);// 6. 确保目录存在if not DirectoryExists(ExtractFilePath(DBPath)) thenif not ForceDirectories(ExtractFilePath(DBPath)) thenbeginShowMessage('无法创建目录: ' + ExtractFilePath(DBPath));Exit;end;// 7. 创建数据库对象Conn := TSQLite3Connection.Create(nil);Trans := TSQLTransaction.Create(nil);Conn.Transaction := Trans;try// 8. 设置数据库路径Conn.DatabaseName := DBPath;// 9. 处理新数据库创建if not FileExists(DBPath) thenbegintryConn.Open;Conn.ExecuteDirect('CREATE TABLE IF NOT EXISTS Test (id INTEGER PRIMARY KEY, name TEXT)');Trans.Commit;Conn.Close;ShowMessage('新建数据库: ' + DBPath);excepton E: Exception doShowMessage('创建数据库失败: ' + E.Message);end;end;// 10. 连接数据库tryConn.Open;Trans.Active := True;if Conn.Connected thenShowMessage('数据库连接成功!' + LineEnding +'路径: ' + DBPath + LineEnding)elseShowMessage('连接失败');excepton E: Exception doShowMessage('数据库连接错误: ' + E.Message + LineEnding +'请检查文件权限: ' + DBPath);end;finallyConn.Free;Trans.Free;end;
end;end.

4 设置并编译

设置输出路径到前面建立的目录。

然后编译。

运行试试:

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

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

相关文章

Host ‘db01‘ is not allowed to connect to this MariaDB server 怎么解决?

出现错误 ERROR 1130 (HY000): Host db01 is not allowed to connect to this MariaDB server,表示当前用户 test 没有足够的权限从主机 db01 连接到 MariaDB 服务器。以下是逐步解决方案: 1. 检查用户权限 登录 MariaDB 服务器(需本地或通过…

打造高可用的大模型推理服务:基于 DeepSeek 的企业级部署实战

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从“能部署”到“可用、好用、能扩展” 近年来,随着 DeepSeek、Qwen、Yi 等开源大模型的持续发…

Spring Boot 使用 ElasticSearch

第一步&#xff0c;开启本地的 ElasticSearch 启动 elasticSearch.bat npm run start (head 插件) 第二步&#xff0c;在 Spring Boot 项目中引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-hig…

软件开发的“中庸之道”:因势而为,心中有数

【软件工程】软件开发的“中庸之道”&#xff1a;因势而为&#xff0c;心中有数 在软件开发的方法论讨论中&#xff0c;我们常常陷入非此即彼的二元对立&#xff1a;要么追求极致的规范化和流程化&#xff0c;严格遵循软件工程的各项标准&#xff1b;要么完全摒弃方法论&#x…

Go和Elixir极简HTTP服务对比

Go 和 Elixir 都是我非常喜欢的编程语言&#xff0c;这次来对比下它们实现一个原生极简 HTTP 服务的过程。 Go 语言标准库自带了网络服务库&#xff0c;只需要简单几行代码就可以实现一个网络服务&#xff0c;这也是一开始它吸引我的一个方面。而 Elixir 标准库本身没有网络服…

为何要学习Objective-C?从环境搭建开始

目录 前言 Swift时代为何还要学Objective-C&#xff1f; 开发环境搭建 1. 安装Xcode 2. 创建第一个Command Line Tool项目 初识Objective-C代码 编写"Hello, Objective-C!" 编译运行程序 为什么Objective-C中的NSLog和NSString前面都有"NS"前缀&a…

ubuntu18.04安装 gcc 9以及2019版本tbb

一、安装gcc 9 ubuntu18.04默认是用的gcc7.5 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt-get install gcc-9 g-9 下面是配置优先用哪个版本的gcc和g &#xff0c;后面带的值越大越优先用谁&#xff0c;并且配置完全局生效不仅仅是在当…

JdbcUtils的三个版本以及sql注入问题

JDBC的工具类 1.0版本 JDBC的工具类 2.0版本&#xff08;智能一些&#xff09;&#xff0c;编写properties属性文件&#xff0c;程序就可以读取属性文件 JDBC的工具类 3.0版本&#xff0c;加入连接池对象 我们封装jdbc工具类是为了减少代码重复&#xff0c;方便开发&#xff0…

AS32系列MCU芯片I2C模块性能解析与调试

国科安芯推出的AS32X601内置的I2C模块提供了符合工业标准的两线串行制接口&#xff0c;可用于MCU和外部IIC设备的通讯。IIC总线使用两条串行线&#xff1a;串行数据线SDA和串行时钟线SCL。 IIC接口模块实现了IIC协议的标准模式和快速模式&#xff0c;支持多主机IIC总线架构。其…

钉钉小程序开发实战:打造一个简约风格的登录页面

在上一篇文章中&#xff0c;我们已经介绍了如何搭建钉钉小程序的基础环境&#xff0c;并完成了项目的初始化配置。本文将继续深入&#xff0c;手把手带你实现一个简约风格的登录页面&#xff0c;这是大多数企业级应用不可或缺的一部分。 钉钉小程序基于前端 Web 技术栈&#x…

论文研读2-1:多GNSS双历元纯相位定位-模型建立与误差分析

后续文章: 论文研读2-2&#xff1a;多GNSS双历元纯相位定位-固定模糊度精度增益 论文研读2-3&#xff1a;多GNSS双历元纯相位定位-定位精度分析 仅相位定位中的模糊度解算问题 在卫星导航定位中&#xff0c;载波相位测量是实现高精度定位的基础&#xff0c;但如果仅使用相位测…

Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)

Python----计算机视觉处理&#xff08;Opencv&#xff1a;图像噪点消除&#xff1a;滤波算法&#xff0c;噪点消除&#xff09; 一、图像平滑 图像平滑处理&#xff08;Smoothing Images&#xff09;&#xff0c;也称为图像模糊处理、图像滤波&#xff08;Images Filtering&am…

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法

笔记&#xff1a;使用EasyExcel导入csv文件出现编码问题&#xff0c;导致导入数据全为null的解决方法 通常情况下&#xff0c;我们使用excel导入&#xff0c;但是部分情况下或者领导要求&#xff0c;我们需要使用csv导入文件&#xff0c;但是csv文件模板下载之后会变成系统当前…

NL2SQL(Natural Language to SQL)优化之道:提升准确率与复杂查询能力

自然语言 → SQL 的转译&#xff08;NL2SQL&#xff09;技术&#xff0c;是让非技术用户与数据库“对话”的桥梁。而在实际应用中&#xff0c;我们不仅需要“能转”&#xff0c;更要“转得准、转得全、转得快”。 一、什么是 NL2SQL&#xff1f; NL2SQL&#xff08;Natural La…

java中map的循环方式

什么是Map集合&#xff1f; Map是Java中的一个接口&#xff0c;它用于存储键-值对&#xff0c;并且键和值都可以是任意对象。它是Java集合框架中的一部分&#xff0c;并提供了一些方法来操作和访问Map中的元素。 Map中的每个键都是唯一的&#xff0c;这意味着不能使用相同的键…

python学习笔记(深度学习)

文章目录 1、概述2、学习内容2.1、pytorch 常见语法2.1.1、sum2.1.2、广播机制2.1.3、张量2.1.4、DataLoader 2.2、普通语法2.2.1、迭代器 1、概述 本篇博客用来记录&#xff0c;在深度学习过程中&#xff0c;常用的 python 语法内容 2、学习内容 2.1、pytorch 常见语法 2.…

力扣网C语言编程题:搜索二维矩阵(右上角->左下角解法)

一. 简介 上一篇文章关于"在二维数组中查找某个元素"的问题&#xff0c;提供了两种解题思路&#xff0c;文章如下&#xff1a; 力扣网C语言编程题&#xff1a;搜索二维矩阵的普通解法与二分查找法-CSDN博客 本文提供第三种解题思路&#xff1a;从左下角->右上角…

AI大模型流式输出,OkHttp Log拦截打印方案

背景&#xff1a; 使用okhttp框架进行网络访问时&#xff0c;一般会使用 HttpLoggingInterceptor 打印请求和响应的log。在使用okhttp访问AI大模型时&#xff0c;如果选择流式输出&#xff0c;那么响应的body数据使用的SSE技术&#xff0c;服务异步发送大模型生成的增量token&…

看数据世界的历史:全面梳理从关系库、大数据到AI时代的数据发展及展望

序章 在数据库不断发展的时代里&#xff0c;我们看到了关系型数据库&#xff08;RDB&#xff09;在一次次的数据演变过程中的占据王位&#xff0c;捍卫了胜利&#xff0c;像一个王朝更替下的“王权”的故事&#xff0c;精彩有趣。 本篇就来探讨下数据库的发展兴衰史&#xff0…

元宇宙与人工智能的融合:从虚拟世界到智能生态的IT新革命

文章目录 引言&#xff1a;前沿技术重塑数字交互体验一、元宇宙与AI融合的本质&#xff1a;虚拟空间与智能交互的交汇元宇宙赋能AI&#xff1a;AI赋能元宇宙&#xff1a; 二、元宇宙与AI融合的演进&#xff1a;从概念到产业热潮三、核心技术&#xff1a;元宇宙与AI融合的基石与…