- 博客(113)
- 资源 (1)
- 收藏
- 关注
原创 C++源码生成·第三章·命令行参数
书接上回,在「C++源码生成·第二章·构建项目」中展示了如何通过替换模板文件中的关键字的方法,实现动态生成项目源码与项目说明文档的功能。在本文中我们继续完善 Python 脚本,增强项目模板的使用,同时将已有的最佳实践在源码生成项目中进行沉淀,提升源码生成工具的实用性。在之前的博文中有介绍 C++ 如何处理命令行参数的方法(见「Linux C/C++ 处理命令行参数」),在源码生成工具中可纳入此特性。
2024-10-26 00:42:52
1007
原创 C++源码生成·第二章·构建项目
书接上回,在「C++源码生成·第一章·初试模板」中展示了通过复制模板文件进行源码生成的方案,同时也描述了使用模板文件在源码生成工具中的作用,包括:提高代码一致性、减少重复劳动、易于维护和更新、增强可扩展性、促进最佳实践等优点。在本章将继续完善 Python 脚本,通过代替模板中的关键字来发挥模板文件的真正作用,实现源码的真正动态生成功能。在本文中展示了通过设计模板文件与使用项目名称替换其中关键字的方法,实现动态生成项目源码与项目说明文档的功能,展示了自动化源码生成工具的强大作用。
2024-10-24 00:30:05
1174
原创 Python 处理命令行参数
在 Python 脚本中处理命令行参数,最常用的方法是使用argparse模块,它提供了强大且灵活的命令行参数解析功能。以下是一个基本的示例,展示了如何使用argparse来处理命令行参数。在 Python 脚本开发过程中,argparse模块允许你轻松地定义、解析和处理命令行参数。argparse模块还提供了命令行出错以及帮助信息的自动生成功能,能够帮助用户更好地理解和正确使用你的 Python 脚本,提升程序的交互性与易用性,为用户提供良好的使用体验。
2024-10-18 19:36:55
466
原创 C++源码生成·第一章·初试模板
在「C++源码生成·序章」中介绍了使用 Python 生成 C++ 源码的基本操作,同时搭建了github项目仓库,通过示例项目和具体步骤展示了具体的实现流程。在本章会开始完善 Python 脚本与源代码模板文件,让其逐步成为一个真正可用的工具。在本文中展示了利用模板文件进行源码生成的机制与方法,同时也说明了模板文件在自动化源码生成工具中的重要作用。自动化源码生成工具通常利用模板引擎来生成代码,从而大大简化了开发和维护过程。本章内容与github是进行联动的,对应的 tag 是v1.1.0。
2024-10-17 17:03:21
872
原创 C++11 使用 {} 进行初始化
C++11 中的列表初始化特性提供了一种更加简洁、直观和安全的初始化方式。它不仅统一了各种对象的初始化方式,而且还能在编译时捕捉窄化转换等潜在错误。因此,在 C++11 及之后的代码中,推荐使用列表初始化作为默认的初始化方式。通过深入理解并掌握这一特性,我们可以编写出更加健壮、可读和可维护的 C++ 代码。
2024-10-17 10:19:16
1026
原创 git tag 用法
git tag是 Git 版本控制系统中的一个命令,用于为特定的提交(commit)创建标签(tag)。标签通常用于标记重要的提交点,比如发布版本(v1.0、v2.0等)。标签可以是轻量级的(lightweight)或附注的(annotated)。轻量级标签直接指向提交对象,而附注标签则是一个包含标签信息和指向提交对象的指针的对象。
2024-10-16 20:32:39
1688
原创 C++源码生成·序章
在软件开发过程中,经常需要编写大量相似或重复的代码,而手动编写代码容易出现拼写错误、逻辑错误等问题。通过自动生成源码,可以显著减少开发人员手动编写代码的时间,避免重复劳动,使开发人员能够专注于更重要的业务逻辑,同时,针对手写代码容易出现的问题,自动生成源码也可以减少这些错误的发生,提高代码的质量。随着代码生成工具、模板元编程技术等的不断发展,自动生成源码变得更加容易和高效。这些工具和技术为开发人员提供了强大的支持,使他们能够更轻松地生成所需的代码。
2024-10-16 15:17:39
996
原创 交叉编译 strace
strace 是 Linux 环境下的一款程序调试工具,用于监控一个应用程序所使用的系统调用以及它所接收到的系统信息。系统管理员、诊断人员和故障排除人员会发现,它对于解决源代码不易获得的程序问题非常宝贵,因为它们不需要重新编译程序来跟踪它们。strace 的操作是由称为 ptrace 的内核特性实现的。
2024-09-12 14:07:26
1120
2
原创 libtool 中的 .la 文件说明
以下是一个名为libgmp.la的.la 可被dlopen()函数调用的动态库名称,可能包含版本号。: 动态库名称。: 静态库名称。: 库的依赖关系。: 库的版本信息。libdir: 安装路径,库文件在文件系统中的位置。通常,开发者不需要直接处理.la文件。libtool和其他工具会自动读取这些信息。然而,了解.la文件的存在和作用可以帮助解决链接问题或理解项目的构建过程。
2024-09-08 10:37:14
856
原创 交叉编译 gdb
GDB 是 GNU Debugger 的简称,是一款功能强大的源码级调试工具,尤其在 Linux 生态系统中占据着举足轻重的地位。它允许程序员在程序运行时检查其内部结构和内存使用情况。GDB 是 GNU 项目的一部分,专为使用 GNU 编译器集合(GCC)编译的程序而设计,但它也支持许多其他编译器和编程语言。设置断点:允许程序在特定位置暂停执行,以便程序员可以检查此时程序的状态。单步执行:允许程序员一次执行一行代码,以便逐步跟踪程序的执行流程。查看变量和内存。
2024-09-03 16:53:20
1936
原创 交叉编译 mpfr
MPFR(Multiple Precision Floating-Point Reliable)是一个用于高精度浮点数计算的开源库,它提供了高精度的浮点数运算和函数库,适用于需要处理大数或高精度数值计算的场景。广泛应用于科学计算、金融计算、数据加密、密码学等领域,如数值模拟、数据分析、物理计算、利率计算、风险评估以及加密算法中的高精度计算等。提供了丰富的数学函数库,包括基本的算术运算、三角函数、对数函数、指数函数等,方便用户进行各种数学计算。
2024-09-03 10:25:21
1514
原创 交叉编译 gmp
GMP (GNU Multiple Precision Arithmetic Library) 是一个用于任意精度计算设计的数学库,它的主要目标应用是密码学应用和研究、互联网安全应用、代数系统、计算代数研究等。GMP 经过精心设计,无论是小操作数还是大操作数,都尽可能快,是一个高性能的数学库。自 1991 年首次发布以来,GMP 还在不断开发和维护,大约每年发布一次新版本。从版本 6 开始,GMP 在双重许可证下发布(和GNU GPL v2),这些许可证使库可以自由使用、共享和改进。
2024-09-02 19:12:57
1278
原创 在Ubuntu/Linux下重温FC游戏——超级玛丽奥
FC 模拟器是指能够在某种机器上运行 FC 游戏的程序,FC 模拟器有好几种,Linux 平台下的 FCEUX 是一款功能强大的免费 FC/NES 模拟器,你可以使用它重温那些经典的游戏。
2024-09-02 13:20:38
2570
原创 Ubuntu/Linux 配置 locale
在 Linux 系统中,locale 是一个非常重要的概念,它定义了系统显示语言、字符编码、日期时间格式等本地化设置。这些设置对于确保软件以用户期望的方式显示信息至关重要,特别是在多语言环境中。
2024-08-31 00:41:16
1853
原创 交叉编译 tcpdump & libpcap
tcpdump 是一个强大的命令行包分析器,libpcap 是一个可移植的用于网络流量捕获的 C/C++ 库。tcpdump 依赖于 libpcap 库,同属于 tcpdump 项目。
2024-07-01 16:12:48
1865
1
原创 Ubuntu/Linux SSH 端口转发
SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外,ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功能可以将一个端口的流量转发到另一个端口,实现端口间的数据转发。本文重点介绍本地端口转发(local port forwarding),其余两种(远程端口、动态端口)转发会在后续的时间进行补充说明。关于ssh命令的具体用法可以在命令行输入man ssh查阅官方手册。man ssh。
2024-06-20 11:50:33
1863
原创 iPerf3 使用指南
iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCTP 与 IPv4 和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告,延迟抖动和数据包丢失。它与原始 iPerf 不共享任何代码,也不向后兼容。它是一个 C/S 架构的测试工具,需要在同时运行在服务器端和客户端。支持的平台:Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, iPhone/iPad 等。
2024-01-19 14:17:33
11635
原创 开发板通过 Ubuntu/Linux 连接外网
如果开发板需要访问外网,可以通过网线将开发板与 Ubuntu 系统连接起来,在 Ubuntu 系统中配置 ip_forward 让 Ubuntu 成为路由器,这样就可以将开发板与外网连接起来。两个带网口的 USB Hub网线其中带网口的 USB Hub 可以参考以下图片到京东或淘宝进行购买(仅供参考)。带网口的 USB Hub 准备好后,一个插在开发板,另一个插到 Ubuntu 系统,中间用网线连接起来,这样它们的网络链接就打造好了。
2024-01-18 20:25:39
3219
2
翻译 【译】Linux Shell 与 Shell 脚本编程简介
如果我们使用任何主要的操作系统,我们都是间接地在与 shell 交互。当运行 Ubuntu, Linux Mint 或任何其他 Linux 发行版本,我们通常使用终端与 shell 进行交互。在本文中,我们将讨论 Linux shell 与 shell 脚本编程,因此在理解 shell 脚本编程之前,我们必须熟悉以下术语:内核是一个计算机程序,是计算机操作系统的核心,可以完全控制系统中的一切。
2024-01-16 23:33:13
690
原创 Ubuntu/Linux 升级 CMake 版本
在 Ubuntu 18.04 系统上默认的 CMake 版本为 3.10.2,当需要进行一些比较新的项目的编译时,比如说,会遇到 CMake 版本不支持问题。这时我们需要升级系统中的 CMake,从 3.10.2 升级到 3.16+ 版本。
2023-02-28 19:08:14
5352
17
原创 交叉编译 iceoryx
iceoryx 是用于各种操作系统的进程间通信(IPC)中间件(目前支持 Linux、macOS、QNX、FreeBSD 和 Windows 10)。它起源于汽车行业,当涉及到驾驶员辅助或自动驾驶系统时,需要在不同的过程之间传输大量数据。然而,有效的通信机制也可以应用于更广泛的用例,例如在机器人或游戏开发领域。iceoryx 使用一种真正的零拷贝共享内存方法,该方法允许在没有单个拷贝的情况下将数据从发布者传输到订阅者。这确保了数据传输具有恒定的延迟,而与有效负载的大小无关。
2023-02-27 11:20:32
1872
3
原创 交叉编译 acl
访问控制列表(Access Control Lists,ACL)是应用在路由器接口的指令列表。在 Linux 系统中,ACL 用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。可以从获取 ACL 源码。同时 ACL 也提供了 git 仓库进行代码管理与开发。
2023-02-24 12:04:58
922
原创 交叉编译 attr
attr – extended attributes on filesystem objects, 扩展文件系统对象的属性。扩展属性实现了用户将 name:value(名称:值)对附加到文件系统中的对象的能力。本文档描述了 attr 命令,它与同名的 IRIX 命令基本兼容。它最初专门针对 XFS 文件系统的用户,尽管它现在可以在任何支持扩展属性的文件系统上使用,但对于与文件系统无关的扩展属性操作的通用和更可移植的接口,请参阅 getfattr 和 setfattr 文档。
2023-02-24 11:50:56
769
原创 交叉编译 MQTT/Mosquitto
Eclipse Mosquitto 是一个开源(EPL/EDL许可)消息代理,它实现了 MQTT 协议版本 5.0、3.1.1 和 3.1。Mosquitto 重量轻,适用于从低功耗单板计算机到全服务器的所有设备。MQTT 协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,如低功耗传感器或移动设备,如手机、嵌入式计算机或微控制器。Mosquitto 项目还提供了一个用于实现 MQTT 客户端的 C 库,以及非常流行的和命令行 MQTT 客户端。
2023-02-23 17:02:43
1566
2
原创 交叉编译 cJSON
JSON 是一种轻量级数据交换格式。它可以表示数据、字符串、有序的值序列以及名称/值对的集合。cJSON 是 ANSI C 中超轻量级的 JSON 解析器。cJSON 旨在成为您可以完成任务的最简单的解析器。它是一个 C 文件和一个头文件。作为一个库,cJSON 的存在是为了尽可能地减少跑腿活儿的工作,但不会妨碍您的工作。作为实用主义的观点(即忽略事实),我想说,你可以在两种模式中使用它:自动和手动。有几种方法可以将cJSON合并到项目中。
2023-02-23 14:36:18
2491
原创 交叉编译 SQLite
SQLite 是一个 C 语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的 SQL 数据库引擎。SQLite 是世界上使用最多的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。SQLite 是一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统。它是 D.RichardHipp 建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
2023-02-21 14:25:25
1020
原创 交叉编译 zlib
zlib 被设计为一个免费的、通用的、不受法律约束的、即不受任何专利保护的无损数据压缩库,可在几乎任何计算机硬件和操作系统上使用。zlib 数据格式本身可以跨平台移植。与Unix 压缩和 GIF 图像格式中使用的 LZW 压缩方法不同,zlib 中当前使用的压缩方法基本上不会扩展数据。(在极端情况下,LZW 可以将文件大小增加两倍或三倍。)zlib 的内存占用量也与输入数据无关,如果需要,可以在压缩时降低一些成本。
2023-02-17 01:00:38
2608
原创 如何给截图添加阴影
想像一下,假如你的截图与文章的底色都是白色的,这样就无法区分图片与文字内容的边界,图片与背景融为一体,如下图所示:所以,如果需要突出图片内容,我们可以给截图添加阴影,这样文字与图片之间就会有一种层级感,可以给到读者一种立体的感觉。今天分享给大家的是利用 GIMP 来实现为图片添加阴影的技巧。
2023-02-14 01:00:00
621
原创 交叉编译 libcap
由于交叉编译 systemd 依赖 libcap 库,所以需要先将 libcap 交叉编译出来,注意不是,libpcap 是在 libcap 基础上开发的,systemd 使用的是 libcap。libcap 属于 Linux 内核开发的一部分,源码托管在 git.kernel.org 网站。在网站的下方有着非常清晰的 git clone 指引,你可以选择任意一个 git 地址进行克隆。
2023-02-04 23:18:58
2856
5
原创 Linux C/C++ 获取系统时间
C 标准库提供了time()函数与函数可以获取到当前系统的日历时间,但time()函数精度只能到秒级,如果需要更高精度的系统时间需要使用函数,精度达到微秒级。
2022-12-15 13:22:54
6147
2
原创 Linux C/C++ 单实例进程设计
当我们使用 C/C++ 开发一个守护进程或者一个服务端程序的时候,有时需要将该程序变成单进程,防止重复打开 socket 端口或者提供重复的服务。如果某个进程同时有多个实例运行,那么每个实例都可能尝试打开同一个端口或执行某个预定的操作,于是造成该操作的重复执行,这很可能导致出错。在 POSIX 系统中可以使用文件和记录锁机制来达成单实例进程设计。文件和记录锁机制为一种方法提供了基础,该方法保证一个守护进程只有一个副本在运行。
2022-12-01 22:44:50
1800
原创 Linux C/C++ 处理命令行参数
到目前为止,大部分人编写的所有程序都可以用一个命令运行。举个例子,如果我们编译了一个称之为myprog./myprog但是,如果你想从命令行向正在运行的程序传递信息,该怎么办?考虑一个更复杂的程序,比如 GCC。要编译myprog字符串-o,myprog和myprog.c都是 gcc 的命令行参数。(从技术上讲,gcc也是一个参数,我们稍后会看到)命令行参数非常有用。毕竟,如果不能向 C 函数传递参数,C 函数就不会很有用了——添加向程序传递参数的功能会使它们更有用。
2022-11-27 17:56:10
3813
1
原创 GCC 生成动态库
GCC (GNU Compiler Collection) 是由 GNU 开发的编程语言编译器。GCC 包括 C, C++, Object-C, Fortran, Java, Ada 和 Go 语言前端,也包括这些语言的库(如 libstdc++, libgcj 等)。
2022-11-16 16:59:03
1062
原创 zlog 简易手册
zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。zlog在效率、功能、安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性。
2022-11-01 17:33:01
632
原创 QNX 7.1 交叉编译 cron
cron 是 Linux 系统上一个非常有用的工具,它可以让你在特定的时间或间隔自动运行指定的任务,你可以使用它来自动执行日志转储、备份、发送邮件通知等。cron 最初是运行在 BSD 4.23 SysV 系统上,目前在 Linux 系统运行的是开源的 cron 实现,其作者为,最后的版本是 1993 年发布的 Vixie Cron V3.0,所以 cron 源码已经有非常长的时间未作任何变动了。
2022-10-27 15:13:00
1840
翻译 译:vsomeip 10 分钟阅读
SOME/IP 是 “SOEoverIP” 的缩写,中文翻译为:基于 IP 的可扩展面向服务中间件。该中间件设计用于典型的汽车用例,并与 AUTOSAR 兼容(至少在有线格式级别上)。公众可访问的规范可从以下站点获取。在本 wiki 中,我们不想进一步探讨另一个中间件规范的原因,但想大致概述一下 SOME/IP 规范及其开源实现 vsomeip 的基本结构,而不要求完整性。
2022-09-18 22:44:20
3816
原创 Ubuntu 安装 Wireshark
Wireshark 是一款图形化的网络协议分析工具。它允许你交互式地浏览实时网络或以前保存的捕获文件中的数据包数据。Wireshark 的本地捕获文件格式是 pcapng 格式,或者是 pcap 格式该格式也是 tcpdump 和其他工具所使用的格式。
2022-09-08 17:36:42
16404
1
翻译 译:SOME/IP 技术细节
SOME/IP 是一种可用于“控制消息”的汽车中间件解决方案。它从一开始就被设计为完美地适合不同大小和不同操作系统的设备,包括小型设备如摄像机、AUTOSAR 设备,上至头部单元或远程信息处理设备,SOME/IP 还确保支持信息娱乐域的功能以及汽车中其他域的功能,允许 SOME/IP 用于大多数替换场景以及更传统的 CAN 场景。
2022-09-06 23:50:18
1151
5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人