当前位置: 首页 > news >正文

在跨平台开发环境中构建高效的C++项目:从基础到最佳实践20241225

在跨平台开发环境中构建高效的C++项目:从基础到最佳实践

引言

在现代软件开发中,跨平台兼容性和高效开发流程是每个工程师追求的目标。尤其是对于 C++ 开发者,管理代码的跨平台构建以及调试流程可能成为一项棘手的挑战。在本文中,我们基于一个完整的 C++ 动态库项目构建过程,分享从 macOS 到 Windows 平台的开发心得,探讨如何通过 Makefile 实现高效构建管理。

无论您是初入开发领域的新人,还是经验丰富的从业者,本文都将为您提供从基础到高级的实战指南,助您构建高质量的 C++ 项目。
在这里插入图片描述

需求背景

随着开发环境和团队协作模式的多样化,开发者通常需要应对以下情境:
1. 开发环境的变化:
• 使用 macOS 进行日常开发,因为 macOS 提供了强大的开发工具链(如 clang、brew)和流畅的开发体验。
• 同时,目标用户和测试环境往往运行在 Windows 系统上,因此必须确保代码在 Windows 下的正常运行。
2. 团队协作与项目交付:
• 开发团队成员可能分布在不同操作系统上。将 macOS 开发的代码无缝迁移到 Windows 环境,是团队高效协作的关键。
• 最终交付的动态库或可执行文件需要兼容 Windows,以满足大多数用户需求。
3. 个人开发者的效率提升:
• 在日常开发中,macOS 提供便捷的命令行工具和良好的开发生态,但个人开发者仍需要在 Windows 下完成最终测试和交付。
• 构建一套高效的跨平台开发流程,能够显著减少调试时间,提升项目稳定性。

项目背景与核心问题

1. 项目需求

本文的案例来源于一个典型的 C++ 项目需求:
• 编写一个动态库(DLL)mylib,包含基本数学运算和版本查询功能。
• 编写一个测试程序 test_main,调用动态库中的功能,验证其正确性。
• 支持在 macOS 和 Windows 上顺利构建、运行、调试,适配不同平台的开发流程。

2. 面临的挑战

在项目开发过程中,开发者可能面临以下问题:
1. 动态库符号导出与链接问题:Windows 平台动态库需要正确设置 __declspec(dllexport) 和 __declspec(dllimport)。
2. 跨平台构建兼容性:不同平台需要不同的编译器、链接器和路径操作命令。
3. Makefile 的复杂性:一个通用的 Makefile 难以适配复杂的跨平台需求。
4. 运行时路径问题:动态库和可执行文件需要在运行时正确找到彼此。

项目完整目录结构

在展开具体实现之前,我们先来看一下最终的项目目录结构:

first_c
├── Makefile           # 主 Makefile,根据平台选择子 Makefile
├── Makefile.mac       # macOS 专用 Makefile
├── Makefile.win       # Windows 专用 Makefile
├── include
│   └── mylib.h        # 动态库的头文件,声明函数接口
├── src
│   ├── mylib.cpp      # 动态库实现文件
│   └── test_main.cpp  # 测试程序,实现对动态库功能的调用
└── build              # 构建目录(运行 make 时生成)

这套结构清晰地将头文件、源码和生成的构建产物分离,便于管理和扩展。

项目文件内容

1. 主 Makefile

主 Makefile 通过操作系统检测,选择对应的子 Makefile 进行构建。

# 主 Makefile,根据操作系统选择子 Makefileifeq ($(OS), Windows_NT)include Makefile.win
elseUNAME_S := $(shell uname -s)ifeq ($(UNAME_S), Darwin)include Makefile.macelseinclude Makefile.linuxendif
endif

2. macOS 专用 Makefile

以下是 Makefile.mac 的完整内容,适配 macOS 平台的构建需求:

# macOS 专用 MakefileCXX := g++
CXXFLAGS := -std=c++17 -Iinclude -Wall -Wextra -fPIC
LDFLAGS := -Lbuild
LDLIBS := -lmylib
SRCDIR := src
BUILDDIR := build
TARGET := $(BUILDDIR)/test_main
LIBRARY := $(BUILDDIR)/libmylib.dylib.PHONY: all cleanall: $(TARGET)$(TARGET): $(LIBRARY) $(BUILDDIR)/test_main.o$(CXX) $(BUILDDIR)/test_main.o $(LDFLAGS) $(LDLIBS) -o $@$(LIBRARY): $(BUILDDIR)/mylib.o$(CXX) -shared $^ -o $@$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp | $(BUILDDIR)$(CXX) $(CXXFLAGS) -c $< -o $@$(BUILDDIR):mkdir -p $@clean:rm -rf $(BUILDDIR)

3. Windows 专用 Makefile

以下是 Makefile.win 的完整内容,适配 Windows 平台的构建需求:

#Windows 专用 MakefileCXX := g++
CXXFLAGS := -std=c++17 -Iinclude -Wall -Wextra
LDFLAGS := -Lbuild
LDLIBS := -lmylib
SRCDIR := src
BUILDDIR := build
TARGET := $(BUILDDIR)/test_main.exe
LIBRARY := $(BUILDDIR)/mylib.dll.PHONY: all cleanall: $(TARGET)$(TARGET): $(LIBRARY) $(BUILDDIR)/test_main.o$(CXX) $(BUILDDIR)/test_main.o $(LDFLAGS) $(LDLIBS) -o $@$(LIBRARY): $(BUILDDIR)/mylib.o$(CXX) -shared $^ -o $@$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp | $(BUILDDIR)$(CXX) $(CXXFLAGS) -c $< -o $@$(BUILDDIR):if not exist "$(BUILDDIR)" mkdir "$(BUILDDIR)"clean:-del /q $(BUILDDIR)\*.o $(BUILDDIR)\*.dll $(BUILDDIR)\*.exe-rmdir /q /s $(BUILDDIR)

4. 动态库头文件 include/mylib.h

#ifndef MYLIB_H
#define MYLIB_H#ifdef _WIN32#ifdef BUILDING_MYLIB#define MYLIB_API __declspec(dllexport)#else#define MYLIB_API __declspec(dllimport)#endif
#else#define MYLIB_API
#endifextern "C" {MYLIB_API const char* get_version();MYLIB_API int add(int a, int b);
}#endif // MYLIB_H

5. 动态库实现文件 src/mylib.cpp

#include "mylib.h"static const char* VERSION = "1.0.0";const char* get_version() {return VERSION;
}int add(int a, int b) {return a + b;
}

6. 测试程序 src/test_main.cpp

#include <iostream>
#include "mylib.h"int main() {std::cout << "Library Version: " << get_version() << std::endl;std::cout << "5 + 3 = " << add(5, 3) << std::endl;return 0;
}

构建与运行

1. 构建项目

•	macOS:
make
•	Windows:
make

2. 运行测试程序

•	macOS:
./build/test_main
•	Windows:
.\build\test_main.exe

3. 预期输出

Library Version: 1.0.0
5 + 3 = 8

总结

通过以上方法,我们成功实现了一个跨平台的 C++ 动态库项目,构建流程清晰且易于维护。本案例的设计和实现不仅适合初学者快速上手,也能为从业者提供实践经验。希望本文能为您带来启发。如果有任何问题或建议,欢迎留言讨论! 😊

相关文章:

在跨平台开发环境中构建高效的C++项目:从基础到最佳实践20241225

在跨平台开发环境中构建高效的C项目&#xff1a;从基础到最佳实践 引言 在现代软件开发中&#xff0c;跨平台兼容性和高效开发流程是每个工程师追求的目标。尤其是对于 C 开发者&#xff0c;管理代码的跨平台构建以及调试流程可能成为一项棘手的挑战。在本文中&#xff0c;我…...

无人零售及开源 AI 智能名片 S2B2C 商城小程序的深度剖析

摘要&#xff1a;本文聚焦无人零售这一新兴零售模式及其发展浪潮中崛起的开源 AI 智能名片 S2B2C 商城小程序。深入阐述无人零售的发展态势&#xff0c;细致剖析其驱动因素、现存问题&#xff0c;全面详细介绍小程序的功能特性、应用优势以及对无人零售的潜在价值&#xff0c;旨…...

PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)

0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分&#xff0c;它们能够有效地去除噪声、提取特征或进行数据降维。例如&#xff0c;使用体素网格滤波&#xff08;VoxelGrid&#xff09;可以减少点云数据量&#xff0c;同时保留重要的形状特征。此外&#…...

v语言介绍

V 语言是一种多用途的编程语言&#xff0c;可以用于前端开发、后端开发、系统编程、游戏开发等多个领域。它的设计哲学是提供接近 C 语言的性能&#xff0c;同时简化开发过程并提高代码的安全性和可读性。接下来我会详细介绍 V 在前后端开发中的应用&#xff0c;并给出一个具体…...

GPT-O3:简单介绍

GPT-O3&#xff1a;人工智能领域的重大突破 近日&#xff0c;OpenAI发布了其最新的AI模型GPT-O3&#xff0c;这一模型在AGI评估中取得了惊人的成绩&#xff0c;展现出强大的能力和潜力。GPT-O3的出现标志着人工智能领域的重大进步&#xff0c;预计将在2025年实现更大的突破。 …...

重温设计模式--适配器模式

文章目录 适配器模式&#xff08;Adapter Pattern&#xff09;概述适配器模式UML图适配器模式的结构目标接口&#xff08;Target&#xff09;&#xff1a;适配器&#xff08;Adapter&#xff09;&#xff1a;被适配者&#xff08;Adaptee&#xff09;&#xff1a; 作用&#xf…...

API部署大模型

由于生产测试环境的服务器配置较低 不能够支撑大模型运行的配置 所以需要将大模型封装部署在A服务器上 在B服务器上进行调用 封装时可以使用FastAPI与Websocket两种通信方式进行通信 Websocket 在A服务器端部署大模型&#xff08;服务端&#xff09; import asyncio import …...

Linux -- 同步与条件变量

目录 同步 条件变量 pthread_cond_t pthread_cond_init&#xff08;初始化条件变量&#xff09; pthread_cond_destroy&#xff08;销毁条件变量&#xff09; pthread_cond_wait&#xff08;线程等待条件变量&#xff09; 重要提醒 pthread_cond_boardcast&#xff08…...

Linux之ARM(MX6U)裸机篇----1.开发环境搭建

下载开启FTP服务 作用&#xff1a;用于电脑与linux系统之前文件传输 如上&#xff0c;编辑完成后重启 Window下FTP客户端安装使用http://www.filezilla.cn/download网址下载 新建网络连接站点 主机后写虚拟机的ip地址&#xff0c;用ifconfig查出ipv4的地址 笔记本电脑中虚拟…...

【C语言】结构体模块化编程

在模块化编程中&#xff0c;结构体作为数据存储的主要方式之一&#xff0c;它不仅用于存储数据&#xff0c;还帮助实现代码的封装与隐私保护。通过将结构体定义放在 .c 文件中并使用 get_ 和 set_ 函数进行访问&#xff0c;我们可以实现对结构体数据的保护&#xff0c;同时降低…...

SpringCloudAlibaba技术栈-Nacos

1、什么是Nacos&#xff1f; Nacos是个服务中心&#xff0c;就是你项目每个功能模块都会有个名字&#xff0c;比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中&#xff0c;其他模块也是这样的。好处是这样能更好地管理项…...

Windows11家庭版启动Hyper-V

Hyper-V 是微软的硬件虚拟化产品&#xff0c;允许在 Windows 上以虚拟机形式运行多个操作系统。每个虚拟机都在虚拟硬件上运行&#xff0c;可以创建虚拟硬盘驱动器、虚拟交换机等虚拟设备。使用虚拟化可以运行需要较旧版本的 Windows 或非 Windows 操作系统的软件&#xff0c;以…...

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&#xff…...

第一节:电路连接【51单片机-L298N-步进电机教程】

摘要&#xff1a;本节介绍如何搭建一个51单片机L298N步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模块 ⑤二相四线步进电机 ⑥电线若干 二、接线 三、L298N模…...

YoloDotNet 识别图像中特定关键点的位置

文章目录 1、初始化 Yolo 对象2、加载图像与检测关键点3、处理检测结果4、自定义关键点绘制和处理5、注意事项1、初始化 Yolo 对象 设置 YoloOptions,包括模型路径、模型类型(如果有专门的关键点检测模型类型则指定)、GPU 使用相关参数等。例如: var yoloOptions = new Yo…...

山景BP1048增加AT指令,实现单片机串口控制播放音乐(一)

1、设计目的 山景提供的SDK是蓝牙音箱demo&#xff0c;用户使用ADC按键或者IR遥控器&#xff0c;进行人机交互。然而现实很多场景&#xff0c;需要和单片机通信&#xff0c;不管是ADC按键或者IR接口都不适合和单片机通信。这里设计个AT指令用来和BP1048通信。AT指令如下图所示…...

Leetcode3218. 切蛋糕的最小总开销 I

题目描述&#xff1a; 有一个 m x n 大小的矩形蛋糕&#xff0c;需要切成 1 x 1 的小块。 给你整数 m &#xff0c;n 和两个数组&#xff1a; horizontalCut 的大小为 m - 1 &#xff0c;其中 horizontalCut[i] 表示沿着水平线 i 切蛋糕的开销。verticalCut 的大小为 n - 1 …...

基于自然语言处理(NLP)的智能客服系统

基于自然语言处理&#xff08;NLP&#xff09;的智能客服系统是现代客户服务领域的一项重要技术&#xff0c;它通过模拟人类对话的方式&#xff0c;为用户提供及时、准确和个性化的服务。以下是关于基于NLP的智能客服系统的一些关键要素和功能&#xff1a; 1. 自然语言理解&am…...

RAG实战:构建基于本地大模型的智能问答系统

RAG实战&#xff1a;构建基于本地大模型的智能问答系统 引言 在当今AI快速发展的时代&#xff0c;如何构建一个既智能又可靠的问答系统是一个重要课题。本文将介绍如何使用RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;结合本地大模型&#xff0c;构建一个高效的智…...

三维扫描在汽车/航空行业应用

三维扫描技术应用范围广泛&#xff0c;从小型精密零件到大型工业设备&#xff0c;都能实现快速、准确的测量。 通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维…...

基于AI IDE 打造快速化的游戏LUA脚本的生成系统

前面写了一篇关于使用AI IDE进行C安全开发的博客《使用AI IDE 助力 C 高性能安全开发&#xff01;》&#xff0c; 得到许多同学们的喜欢&#xff0c;今天我们来继续在游戏开发中扩展一下AI的能力&#xff0c;看看能不能给游戏研发团队一些启发。 在游戏研发中&#xff0c;Lua曾…...

http的访问过程或者访问页面会发生什么

1. 建立连接 客户端与服务器之间需要建立 TCP 连接&#xff0c;常用步骤如下&#xff1a; DNS解析&#xff1a;客户端将目标 URL 转换为服务器的 IP 地址。三次握手&#xff1a;TCP 协议通过三次握手建立可靠连接&#xff0c;确保双方具备通信能力。传输层连接建立&#xff1…...

Lua 函数

Lua 函数 1. 概述 Lua是一种轻量级的编程语言&#xff0c;常用于游戏开发、脚本编写和嵌入式系统。在Lua中&#xff0c;函数是一等公民&#xff0c;意味着它们可以作为变量传递&#xff0c;也可以作为参数传递给其他函数。本文将详细介绍Lua中的函数&#xff0c;包括函数的定…...

产品升级!Science子刊同款ARGs-HOST分析,get!

凌恩生物明星chanpin 抗性宏基因-宿主分析 Science子刊同款分析 数据挖掘更进一步&#xff01; 抗生素的大量使用与滥用使微生物体内编码抗生素抗性的基因在环境中选择性富集&#xff0c;致病菌通过基因突变或者水平基因转移获得抗生素抗性基因后&#xff0c;导致抗生素治疗…...

Kubernetes PV及PVC的使用

前提条件 拥有Kubernetes集群环境&#xff0c;可参考&#xff1a;Kubernetes集群搭建理解Kubernetes部署知识&#xff0c;可参考&#xff1a;使用Kubernetes部署第一个应用 、Deloyment控制器拥有NFS服务&#xff0c;可参考&#xff1a;Linux环境搭建NFS服务 概述 Persistent…...

struct udp_sock

这个struct udp_sock结构体是Linux内核网络栈中用于表示一个UDP套接字的数据结构。它继承自struct inet_sock,这意味着它包含了所有IPv4或IPv6套接字共享的基础信息和函数指针。下面是对struct udp_sock中一些关键成员的解释: struct inet_sock inet;:这是udp_sock结构体的第…...

《机器学习》数据预处理简介

目录 1. 数据清洗&#xff08;Data Cleaning&#xff09; &#xff08;1&#xff09;处理缺失值 &#xff08;2&#xff09;处理异常值 &#xff08;3&#xff09;处理重复数据 2. 数据转换&#xff08;Data Transformation&#xff09; &#xff08;1&#xff09;特征缩…...

USB接口实现CDC(usb转串口功能)

主控&#xff1a;stm32f429 PHY芯片&#xff1a;usb3320 Cubemx System Core-RCC connectivity-USB_OTG_HS Middleware and Software Packs-USB_DEVICE 时钟配置&#xff1a;根据自己使用的MCU工作频率设置 Generate Code Keil5 打开工程 usbd_cdc_if.c这个文件&…...

ubuntu 网络管理--NetworkManager

ubuntu 网络管理--NetworkManager 1 介绍2 NetworkManager 命令2 nmcli 命令显示可用的wifi AP连接wifi检查网络连接 ?? 如何删除删除网络连接查看设备状态添加一个新的以太网连接设置静态 IP 地址启用并测试连接添加新的wifi连接 3 其他命令参考 1 介绍 NetworkManager 是标…...

FLV视频封装格式详解

目录(?)[-] OverviewFile Structure The FLV headerThe FLV File BodyFLV Tag Definition FLVTAGAudio TagsVideo TagsSCRIPTDATA onMetaDatakeyframes Overview Flash Video(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式. File Structure…...

每天五分钟机器学习:核函数

本文重点 在学习支持向量机算法之前,我们要继续学习一些数学基础,本文我们将学习核函数的概念。当数据线性不可分的时候,此时就需要核函数出场了,它可以将低维不可分的数据映射到高维可分数据,此时就可以完成数据分类了。 核函数的定义 核函数K(x, y)定义为两个数据点x…...

Flutter开发HarmonyOS 鸿蒙App的好处、能力以及把Flutter项目打包成鸿蒙应用

Flutter开发HarmonyOS的好处&#xff1a; Flutter是谷歌公司开发的一款开源、免费的UI框架&#xff0c;可以让我们快速的在Android和iOS上构建高质量App。它最大的特点就是跨平台、以及高性能。 目前 Flutter 已经支持 iOS、Android、Web、Windows、macOS、Linux 的跨平台开发…...

4-pandas常用操作

前言 一、DataFrame修改index、columns 1.获取index df2 pd.DataFrame(np.arange(9).reshape(3,3),index[sh,cs,bj],columns[a,b,c]) df2.index 2.修改index df2.index [shanghai,changsha,beijing] df2.columns [A,B,C] # 注意赋值的顺序 3.批量修改&#xff…...

Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...

【0376】Postgres内核 分配 last safe MultiXactId

上一篇: 【0375】Postgres内核 XLOG 之 设置下一个待分配 MultiXactId 和 offset 文章目录 1. 最后一个安全的 MultiXactId1.1 计算 multi wrap limit1.2 计算 multi stop limit1.3 计算 multi warn limit1.4 计算 multi vacuum limit2. 初始化 MultiXactState 成员3. 完成 mu…...

大模型时代的NL2SQL初探

大模型时代的NL2SQL初探 NL2SQL的基本概念NL2SQL的实现逻辑现代NL2SQL框架与技术大语言模型&#xff08;LLM&#xff09;在NL2SQL中的应用向量数据库的作用NL2SQL的应用场景未来展望 在当今信息化时代&#xff0c;数据库已成为各行各业的数据存储核心。然而&#xff0c;直接使用…...

Linux环境下使用tomcat+nginx部署若依项目

Linux Tomcat MySQL Java 是构建动态网站系统的完美解决方案之一&#xff0c;具有免费、高 效、扩展性强且资源消耗低等优良特性。 Java Web 凭借其优秀的开发框架和良好的生态被广 泛应用于社会各行业的信息化系统构建。 本实验以若依管理系统&#xff08; http://ruo…...

京准电钟解读,NTP网络授时服务器如何提升DCS系统效率

京准电钟解读&#xff0c;NTP网络授时服务器如何提升DCS系统效率 京准电钟解读&#xff0c;NTP网络授时服务器如何提升DCS系统效率 NTP 网络授时服务器为防火墙内的网络设备、终端、服务器提供准确、可靠和安全的高精度卫星时间参考&#xff0c;可为它支持数万台支持标准的网…...

06 - Django 视图view

HttpRequest 和 HttpResponse Django中的视图主要用来接受Web请求&#xff0c;并做出响应。 视图的本质就是一个Python中的函数 视图的响应分为两大类 以Json数据形式返回(JsonResponse)以网页的形式返回 重定向到另一个网页 (HttpResponseRedirect)错误视图(4XX,5XX) (Htt…...

MySQL数据库(锁)

1、MySQL有哪些锁&#xff1f; 全局锁&#xff1a;flush tables with read lock 执行以下语句之后&#xff0c;使用全局锁&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行对数据的增删改或者对表结构的更改操作操作&#xff0c;都会被阻塞。 全局锁的应…...

Mac Android studio 升级LadyBug 版本,所产生的bug

当Build 出现&#xff0c;这样的文字以后&#xff1a; Your build is currently configured to use incompatible Java 21.0.3 and Gradle 7.3.3. Cannot sync the project. We recommend upgrading to Gradle version 8.9. The minimum compatible Gradle version is 8.5. …...

springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目

springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&am…...

基于Java+Jsp Servlet Mysql实现的Java Web在线商城项目系统设计与实现

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的飞速发展&#xff0c;电子商务已成为现代商业活动的重要组成部分。在线商城作为电子商务的一种重要形式&#xff0c;以其便捷性、高效性和广泛覆盖性&#xff0c;受到了越来越多消费者的青睐。同时&#xff0c;随着消…...

安装K8s集群

文章首发于我的博客 &#xff1a;https://blog.liuzijian.com/post/9aa6d426-a01c-05b0-6f7a-5da4343f0f9e.html 因阿里云加速服务调整&#xff0c;镜像加速服务自2024年7月起不再支持&#xff0c;拉取镜像&#xff0c;下载网络插件等操作&#xff0c;需要科学上网访问DockerHu…...

【数据科学导论】第一二章·大数据与数据表示与存储

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据处理与分析_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…...

LabVIEW数字式气压计自动检定系统

开发了一个基于LabVIEW开发的数字式气压计自动检定系统。在自动化检定PTB220和PTB210系列数字气压计&#xff0c;通过优化硬件组成和软件设计&#xff0c;实现高效率和高准确度的检定工作&#xff0c;有效降低人力成本并提升操作准确性。 项目背景 随着自动气象站的广泛部署&a…...

按行分割文本函数(C++)

文本分割函数SplitText2Line解析 以下是对SplitText2Line函数的详细介绍&#xff1a; void SplitText2Line(s8* strText, std::vector<std::string>& vecStrLines) {// 1. 清空存储结果的向量vecStrLines.clear();// 2. 打印原始文本信息&#xff08;用于调试目的&…...

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释&#xff1a; …...

【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;该程序需输入个人数据&#xff0c;进而预测其成年后的身高。 相关知识 为了完成本…...

使用Excel制作通达信自定义外部数据,安排!!!

Excel相信大家电脑上都有这个工具&#xff0c;相比敲编程代码&#xff0c;用这个去做自定义数据对大多数人&#xff0c;应该是比较友好的。自定义数据分为外部序列数据&#xff0c;看了一下内容理解起来比较多&#xff0c;分两期给大家介绍。为了照顾电脑基础薄弱的朋友&#x…...