sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm
sqlite3 c++ client选择
今日20250305
- 2.4K星: 7月前最后提交核心: SRombauts/SQLiteCpp.git : 薄封装、命令式sql、非orm、支持事务
- 2.4K星: 1月前最后提交核心: fnc12/sqlite_orm.git : 厚封装、非侵入、真orm、真泛型、类型复杂、支持事务
因真泛型导致DbInstance必须放在x.h中,否则无法引出DbInstance的类型, 若x.h被多方包含而总链接过程可能诱发重复函数报错
(笨办法是 将auto类型 打印出来 而手工填回x.h内,从而改造为 x.h和x.cpp配合的正常形式,避免总链接重复函数报错)
因真泛型导致类型复杂而必须大量使用auto - 0.9K星: 3年前最后提交核心: SqliteModernCpp/sqlite_modern_cpp.git: 薄封装、sql+流操作符、非orm、支持事务
- 0.7星: 7年前最后提交核心: paulftw/hiberlite.git : 厚封装、宏侵入、半orm、类型简单、未见事务
- 0.6星: 7年前最后提交核心: iwongu/sqlite3pp.git : 薄封装、命令式sql、字段名绑定、类型简单、支持事务
fnc12/sqlite_orm.git
将auto类型 打印出来 而手工填回x.h内,从而改造为 x.h和x.cpp配合的正常形式,避免总链接重复函数报错
//{c++复杂类型文本打印 开始
//注意模板实例必须让编译器看到
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>template <typename T>
void CxxPrintType( const T& value) {int status = 0;char* demangled = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status);if (status == 0) {std::cout << "类型Sqlite3Db:【 " << demangled << "】" << std::endl;free(demangled); // 必须手动释放内存} else {std::cout << "Failed_to_demangle_name." << std::endl;}
}
//c++复杂类型文本打印 结束}
std::string db_path = "/tmp/insert.sqlite3.db";
using namespace sqlite_orm;
auto tb_TypeDef= make_table("tb_TypeDef",
make_column("typeId", &TbTypeDef::typeId, primary_key().autoincrement()),
make_column("typeName", &TbTypeDef::typeName,unique()),
make_column("category", &TbTypeDef::category)
);
auto tb_TypeDefLoc= make_table("tb_TypeDefLoc",...);
auto tb_StructDef= make_table("tb_StructDef",...);
auto tb_UnionDef= make_table("tb_UnionDef",...);
auto tb_ClassDef= make_table("tb_ClassDef",...);auto db = make_storage(db_path, tb_TypeDef,tb_TypeDefLoc,tb_StructDef,tb_UnionDef,tb_ClassDef );CxxPrintType( db); // 类型Sqlite3DbType由此行打印出来, 打印结果 作为 手工放到 宏 Sqlite3DbType 右边
#define Sqlite3DbType sqlite_orm::internal::storage_t<sqlite_orm::internal::table_t<TbTypeDef, false, sqlite_orm::internal::column_t<int TbTypeDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<> > >, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDef::*, sqlite_orm::internal::empty_setter> >, sqlite_orm::internal::table_t<TbTypeDefLoc, false, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter>, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDefLoc::*, sqlite_orm::internal::empty_setter> >, sqlite_orm::internal::table_t<TbStructDef, false, sqlite_orm::internal::column_t<int TbStructDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > >, sqlite_orm::internal::table_t<TbUnionDef, false, sqlite_orm::internal::column_t<int TbUnionDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > >, sqlite_orm::internal::table_t<TbClassDef, false, sqlite_orm::internal::column_t<int TbClassDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > > >
fnc12/sqlite_orm
问题:fnc12/sqlite_orm.git理想情况下需要将DbConn放在x.h中,可能导致链接时有重复函数
优势:真泛型、真orm
参考 README.md#installation
编译步骤
#ubuntu22.04#source /app/bash-simplify/gitproxy.sh && gitproxy_set
git config --global http.proxy socks5://westgw:7890 ;
git config --global https.proxy socks5://westgw:7890 ; git --no-pager config --list | grep proxy
#http.proxy=socks5://westgw:7890
#https.proxy=socks5://westgw:7890
sudo apt install -y libsqlite3-devrepoD=/app3/sqlite_orm__fnc12
bldD=${repoD}__build
installD=${repoD}__install
repoUrl=https://github.com/fnc12/sqlite_orm.git
repoTag=v1.9.1git clone -b $repoTag $repoUrl $repoD
#展开:git clone -b v1.9.1 https://github.com/fnc12/sqlite_orm.git /app3/sqlite_orm__fnc12
cmake -S $repoD -B $bldD -DCMAKE_INSTALL_PREFIX=$installD
#展开: cmake -S /app3/sqlite_orm__fnc12 -B /app3/sqlite_orm__fnc12__build -DCMAKE_INSTALL_PREFIX=/app3/sqlite_orm__fnc12__install#列出目标
cmake --build $bldD --target help | grep -i build
#... rebuild_cache
#... ContinuousBuild
#... ExperimentalBuild
#... NightlyBuildcmake --build $bldD --target install -j 4
#展开: cmake --build /app3/sqlite_orm__fnc12__build --target install -j 4ls $bldD/cmake_install.cmake #安装脚本
#(展开):安装脚本为: /app3/sqlite_orm__fnc12__build/cmake_install.cmake
#安装目录 CMAKE_INSTALL_PREFIX 写在此 安装脚本 cmake_install.cmake 内
编译产物
( cd $installD ; find . -type f )
#展开: cd /app3/sqlite_orm__fnc12__install ; find . -type f
/app3/sqlite_orm__fnc12__install/目录下为编译产物
./include/sqlite_orm/sqlite_orm.h
./lib/cmake/SqliteOrm/SqliteOrmConfig.cmake
./lib/cmake/SqliteOrm/SqliteOrmConfigVersion.cmake
./lib/cmake/SqliteOrm/SqliteOrmTargets.cmake
报错记录
1. 需要libsqlite3-dev
cmake -S /app3/sqlite_orm__fnc12 -B /app3/sqlite_orm__fnc12__build:报错:
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find SQLite3 (missing: SQLite3_INCLUDE_DIR SQLite3_LIBRARY)
Call Stack (most recent call first):/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)/usr/share/cmake-3.22/Modules/FindSQLite3.cmake:54 (find_package_handle_standard_args)dependencies/CMakeLists.txt:28 (find_package)
解决: sudo apt install -y libsqlite3-dev
abseil-cpp
参考: https://abseil.io/docs/cpp/quickstart-cmake
abseil-cpp.git/dd4c89b == abseil-cpp.git/20240722.1
1. clone代码仓库、编译
git clone https://github.com/abseil/abseil-cpp.git /app/abseil-cpp/
#/app/abseil-cpp/.git/config
git checkout 20240722.1git rev-parse HEAD
#dd4c89bd657f1e247ce5111a5c89ffe6ccfd0c92cmake -S /app/abseil-cpp -B /app/abseil-cpp/build -DABSL_BUILD_TESTING=OFF -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=14
cmake --build /app/abseil-cpp/build --target all
ls /app/abseil-cpp/absl/strings/str_split.h
2. test.cpp
#include <string>
#include <vector>
#include "absl/strings/str_split.h"#include <stdio.h>
int main(int argc, char** argv){std::vector<std::string> v = absl::StrSplit("a,b,c", ',');
printf("v[0]=%s\n",v[0].c_str());return 0;
}
3. 编译运行
/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++ -v -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/ -l absl_base -l absl_raw_logging_internal -l absl_throw_delegate -l absl_string_view -l absl_strings_internal -l absl_strings -I /app/abseil-cpp/ test.cpp -o test.elf && ./test.elf
正常运行,并输出a
3A. 当少给 .a时 链接报错举例
/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++ -v -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/ -L /app/abseil-cpp/build/absl/log/ -l absl_base -l absl_log_internal_format -l absl_string_view -l absl_strings_internal -l absl_strings -I /app/abseil-cpp/ test.cpp -o test.elf && ./test.elf
报错
"/usr/bin/ld" -pie -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test.elf /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/app/abseil-cpp/build/absl/base/ -L/app/abseil-cpp/build/absl/strings/ -L/app/abseil-cpp/build/absl/log/ -L/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/../lib/x86_64-unknown-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib -L/lib -L/usr/lib -labsl_base -labsl_log_internal_format -labsl_string_view -labsl_strings_internal -labsl_strings /tmp/test-9d0c36.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /lib/x86_64-linux-gnu/crtn.o
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::raw_log_internal::RawLog(absl::lts_20240722::LogSeverity, char const*, int, char const*, ...)
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::base_internal::ThrowStdOutOfRange(char const*)
clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
3B. 报错探索并解决: nushell 在*.a中查找给定函数所在.a
nushell == /app5/nu-0.102.0-x86_64-unknown-linux-gnu/nu
3A报错缺少函数
absl::lts_20240722::raw_log_internal::RawLogabsl::lts_20240722::base_internal::ThrowStdOutOfRange
以下用nushell查找这些函数所在.a
/usr/bin/find /app/abseil-cpp/build/absl/ -name "*.a" | lines|each { |f| nm --defined-only -C $f } | str contains "absl::lts_20240722::base_internal::ThrowStdOutOfRange" | /usr/bin/grep true
# │ 8 │ true │/usr/bin/find /app/abseil-cpp/build/absl/ -name "*.a" | lines|each { |f| $f } | /usr/bin/grep " 8 "
#│ 8 │ /app/abseil-cpp/build/absl/base/libabsl_throw_delegate.a │/usr/bin/find /app/abseil-cpp/build/absl/ -name "*.a" | lines|each { |f| nm --defined-only -C $f } | str contains "absl::lts_20240722::raw_log_internal::RawLog" | /usr/bin/grep true
# │ 4 │ true │/usr/bin/find /app/abseil-cpp/build/absl/ -name "*.a" | lines|each { |f| $f } | /usr/bin/grep " 4 "
# │ 4 │ /app/abseil-cpp/build/absl/base/libabsl_raw_logging_internal.a │相关文章:
sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm
sqlite3 c client选择 今日20250305 2.4K星: 7月前最后提交核心: SRombauts/SQLiteCpp.git : 薄封装、命令式sql、非orm、支持事务2.4K星: 1月前最后提交核心: fnc12/sqlite_orm.git : 厚封装、非侵入、真orm、真泛型、类型复杂、支持事务 因真泛型导致DbInstance必须放在x.h…...
Pytorch中的主要函数
目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda;torch.bac…...
景联文科技:以专业标注赋能AI未来,驱动智能时代的精准跃迁
在人工智能技术重塑全球产业格局的今天,高质量训练数据已成为驱动算法进化的核心燃料。作为数据智能服务领域的领军者,景联文科技深耕数据标注行业多年,以全栈式数据解决方案为核心,构建起覆盖数据采集、清洗、标注、质检及算法调…...
车载测试:智能座舱测试中多屏联动与语音交互的挑战
智能座舱作为汽车智能化发展的核心,集成了多屏联动和语音交互功能,为驾驶员和乘客提供更便捷的体验。然而,这些功能的测试面临诸多挑战,包括多屏同步性、噪声干扰和复杂场景的处理。本文将详细分析这些挑战,探讨测试方…...
深入探索WebGL:解锁网页3D图形的无限可能
深入探索WebGL:解锁网页3D图形的无限可能 引言 。WebGL,作为这一变革中的重要技术,正以其强大的功能和广泛的应用前景,吸引着越来越多的开发者和设计师的关注。本文将深入剖析WebGL的核心原理、关键技术、实践应用,并…...
仿mudou库one thread oneloop式并发服务器
项目gitee:仿muduo: 仿muduo 一:项目目的 1.1项目简介 通过咱们实现的⾼并发服务器组件,可以简洁快速的完成⼀个⾼性能的服务器搭建。 并且,通过组件内提供的不同应⽤层协议⽀持,也可以快速完成⼀个⾼性能应⽤服务器…...
Linux 文件和目录权限管理详解
文章目录 Linux 文件和目录权限管理详解介绍权限管理的核心内容权限管理访问权限查看权限更改权限所有者和用户组的设置权限设置注意事项 总结 Linux 文件和目录权限管理详解 介绍 在 Linux 系统中,文件和目录的权限管理是确保系统安全的重要组成部分。每个文件和…...
CentOS 7 aarch64上制作kernel rpm二进制包 —— 筑梦之路
环境说明 centos 7 aarch64 gcc 8.3.1 kernel 5.4.290 准备编译制作 # 安装必要的工具和包yum install rpm-devel rpmdevtools yum groupinstall "Development Tools"yum install ncurses-devel bc elfutils-libelf-devel openssl-devel # 安装gcc 8.3.1# 修改…...
Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(二)
GPU 和 CPU 之间的同步 CPU 必须执行 MonitoredValue 的更新,并读取 CurrentValue,以确保不会丢失正在进行的信号中断通知。 当向系统中添加新的 CPU 等待程序时,或者如果现有的 CPU 等待程序失效时,OS 必须修改受监视的值。OS …...
vscode 都有哪些大模型编程插件
VSCode 中有许多基于大模型的编程插件,这些插件通过集成人工智能技术,显著提升了开发者的编程效率和体验。以下是一些主要的大模型编程插件及其功能: GitHub Copilot GitHub Copilot 是由 OpenAI 开发的插件,能够根据代码上下文自…...
常用的分布式 ID 设计方案
文章目录 1.UUID2.数据库自增 ID3.雪花算法4.Redis 生成 ID5.美团 Leaf 1.UUID 原理:UUID 是由数字和字母组成的 128 位标识符,通过特定算法随机生成,包括时间戳、计算机网卡地址等信息。常见的版本有版本 1(基于时间戳和 MAC 地…...
DAIR-V2X-R数据集服务器下载
【官方github链接】https://github.com/ylwhxht/V2X-R 点击并登录 选择并点击下载 浏览器弹窗,右键选择复制下载链接 ------------------------------------服务器下载----------------------------------------- 登录服务器,选在要下载的文件夹复制路…...
EasyRTC嵌入式视频通话SDK的跨平台适配,构建web浏览器、Linux、ARM、安卓等终端的低延迟音视频通信
1、技术背景 WebRTC是一项开源项目,旨在通过简单的API为浏览器和移动应用程序提供实时通信(RTC)功能。它允许在无需安装插件或软件的情况下,实现点对点的音频、视频和数据传输。 WebRTC由三个核心组件构成: GetUserM…...
影院购票系统(二)——uni-app移动应用开发
这一篇讲解系统的逻辑代码部分,下面是ai的讲解,也可以直接跳到代码部分进行浏览。 一、整体功能概述 这个Vue组件构建了一个完整的影院座位选择系统,涵盖从座位数据初始化、视图渲染到交互处理以及业务逻辑的整个流程。它遵循响应式编程模式…...
DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
背景 在全球人工智能技术高速迭代的背景下,算力成本高企、异构资源适配复杂、模型部署效率低下等问题,始终是制约企业AI规模化应用的关键。 DeepSeek以创新技术直击产业痛点,而博云先进算力管理平台AIOS的全面适配,则为这一技术…...
DeepSeek能画流程图吗?分享一种我正在使用的DeepSeek画流程图教程
…...
网络安全试题填空题
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 2018年期末题 1. 分布式防火墙系统组成不包括(D) A.网络防火墙 B.主机防火墙 C.中心管理防火墙 D.传统防火墙 2.下列不是入侵者主要行为模…...
MySQL中查看表结构
1. 使用 DESCRIBE 或 DESC 命令 DESCRIBE(或其简写 DESC)是最简单和最直接的方法,可以显示表的列信息。 语法: DESCRIBE table_name; -- 或者 DESC table_name;示例: 假设有一个名为 employees 的表,可以…...
个推助力小米米家全场景智能生活体验再升级
当AI如同水电煤一般融入日常,万物互联的图景正从想象照进现实。作为智能家居领域的领跑者,小米米家凭借开放的生态战略,已连接了超8.6亿台设备,构建起全球领先的消费级AIoT平台。如今,小米米家携手个推,通过…...
linux服务器根据内核架构下载各种软件依赖插件(例子:Anolis服务器ARM64架构内核Nginx依赖插件下载)
Anolis服务器ARM64架构内核Nginx依赖插件下载 Nginxy依赖包:阿里云镜像站搜索自己的系统如下点击系统,进入详情页面点击下载地址点击对应版本号选择Os继续点击OS点击Packagesctrf搜索资源,依次下载资源,版本建议选最新把下载好的资…...
[css] line-height如何继承
line-height继承,一共有以下3种情况: <body><p>这是一行文字</p> </body>写具体数值,则直接继承该值。 body {font-size: 20px;line-height: 50px; /* 数值 */ } p {font-size: 10px; }<p> 元素 line-height…...
GaussianCity:实时生成城市级数字孪生基底的技术突破
在空间智能领域,如何高效、大规模地生成高质量的3D城市模型一直是一个重大挑战。传统方法如NeRF和3D高斯溅射技术(3D-GS)在效率和规模上存在显著瓶颈。GaussianCity通过创新性的技术方案,成功突破了这些限制,为城市级数字孪生的构建提供了全新路径。 一、核心创新:突破传…...
华为配置篇-OSPF基础实验
OSPF 一、简述二、常用命令总结三、实验3.1 OSPF单区域 一、简述 OSPF(开放式最短路径优先协议) 基本定义 全称:Open Shortest Path First 类型:链路状态路由协议(IGP),用于自治系统ÿ…...
获取哔站评论
一、文章立论 哔哩哔哩(B站)是当前年轻人十分喜爱的视频分享平台,以其丰富多样的内容、互动性强的社区氛围以及独特的弹幕文化深受用户喜爱。在该平台上,用户不仅可以观看各种类型的视频,如动画、游戏、科技、生活、影…...
《当AI生成内容遭遇审核:需求与困境的深度剖析》:此文为AI自动生成
AI 内容审核:数字时代的守门人 在当今数字技术迅猛发展的浪潮中,AI 在内容生成领域取得了令人瞩目的成就,成为了推动创新与变革的核心力量。以 AI 绘画为例,从早期简单粗糙的图像生成,到如今能够创作出细节丰富、风格多…...
jenkins流程概述
1. 需求场景 代码托管在 GitHub/GitLab需要 自动化构建 Docker 镜像,并部署到 Docker 服务器生产环境使用 Docker Compose 或 Kubernetes(K8s) 2. Jenkins 流程 拉取代码使用 Maven 构建 JAR使用 Docker 构建镜像推送 Docker 镜像到仓库在…...
深入 Vue.js 组件开发:从基础到实践
深入 Vue.js 组件开发:从基础到实践 Vue.js 作为一款卓越的前端框架,其组件化开发模式为构建高效、可维护的用户界面提供了强大支持。在这篇博客中,我们将深入探讨 Vue.js 组件开发的各个方面,从基础概念到高级技巧,助…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guide…...
C#基础及标准控件的使用,附登录案例
C#基础及标准控件的使用,附登录案例 一、项目整体结构1. 项目结构2. 程序结构二、项目的基础操作三、常用的windows标准控件1. 按钮控件的使用2. 项目资源的配置(如图标)3. 文本控件的使用四、WinForm程序生成及运行调试1. Debug调试模式下生成2. Release发布模式下生成3. 程…...
61. Three.js案例-彩色旋转立方体创建与材质应用
61. Three.js案例-彩色旋转立方体创建与材质应用 实现效果 知识点 WebGLRenderer(WebGL渲染器) 构造器 WebGLRenderer( parameters : Object ) 参数类型描述antialiasBoolean是否执行抗锯齿(默认false)alphaBoolean是否包含alpha通道(默认false)方法 setSize( width…...
