C++跨平台学习(一):入门了解

C++的可移植性和跨平台开发(长文) 反过来,如果你要定义一个大小必须为4字节的有符号整数,也不要直接用int,要用预先typedef好的定长类型(比如boost库的int32_t、ACE库的ACE_INT32、等)。有兴趣的同学可以参见“这里”。如果你企图用当中的某个选项,一定要先把它的特性、可能的副作用都摸清楚,否则将来死都不知道怎么死的。由于当前的C++ 03标准几乎没有涉及线程相关的内容(即使将来C++ 0x包含了线程的标准库,编译器厂商的支持在短期内也未必全面),所以在未来很长的一段时间,跨平台的多线程支持还是要依赖第三方库。 阅读详情

本文不涉及代码和过于深入的东西,只是小白在学习过程中,记录跨平台中的一些case,希望对同样刚接触跨平台开发的小白有所帮助。

跨平台开发说的是什么

跨平台开发,最典型的就是移动时代,厂商开发一个app往往需要Android和ios上俩套东西,同时还有着非常复杂的机型。
为了解决不同操作系统终端的开发难题,跨平台技术成为了首选,为企业和开发者节省成本。

那么跨平台是什么意思呢?

  1. 第一种:一份代码,到处编译。比如C语言,rust。
  2. 第二种:一次编译,到处运行。比如Java。
  3. 第三种:不用编译,各自解释。比如Python,JavaScript。

一次编译,到处运行 的跨平台
比如说我们在 Windows 下面写出来的一段 Java 程序,换成 Linux,macOS 系统里面,一样可以正常运行并且输出相同的结果,但是这一点,换成 C/C++ 却很难办到。那么跨平台的特性,就是 JVM 决定的了。
这里简单介绍jvm,方便大家了解。

Java 虚拟机(Java Virtual Machine,简称 JVM)是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM 屏蔽了与具体操作系统平台相关的信息,使 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM 在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

总结来说,java借助jvm把语言翻译成各大平台可以理解的语言,这一点是C\C++所没有的。

我们想通过跨平台来实现什么

一次编译,到处运行

计算机语言的跨平台

从上面的介绍中,我们认为大部分的计算机语言都是“跨平台”语言,因为它们都可以在不同的平台上编译源代码(少数不能跨平台:汇编语言)。
只不过时代变了,我们想要的不一样了。
但是我们想要的结果是,只编译一次代码,可以在各个平台运行,这就是C\C++做不到的了。

这里我们先记住个结论
C\C++编译出来的二进制文件,是不可以跨平台的。
所以 C/C++应该算有限跨平台语言,必须依赖于严格的规范 才可以跨平台运行。

C\C++跨平台:“一次套代码,到处运行”

从个人的角度出发,最近实现了c++的跨平台,也就是实现了近似的“一次编译,到处运行”,直白地说,C++的“跨平台”方式是“一套代码,到处运行”。

一点点小的经验

从事跨平台开发的第一步,就是找一个靠谱的跨屏台第三方库,之后的代码在此基础上展开,业务代码不涉及到系统相关性,一般也是跨平台的。
这里推荐几个开源的第三方跨平台库:

  1. STL—C++标准库,应该不用过多介绍了。
  2. Boost—准标准库,功能强大涉及能想的到的大部分非特别领域的算法,有一个大的C++社区支持。
  3. Log4cpp-------日志处理 ,功能类似java中的log4j
  4. Crypto++ -----加/解密算法库, 非常专业的C++ 密码学函式库
  5. QT ----大名顶顶的一个多平台的C++图形用户界面应用程序框架(GUI库)
  6. ACE—庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。http://www.cs.wustl.edu/~schmidt/ACE.html

C++跨平台工具

上面说的是语言层面的工作,写代码的时候这么写就是达到了跨平台的需求,下面就是工程化恶的问题了。
工具主要分为编译工具和包管理工具。
这里作者只用过俩套,所以只推荐这俩套,至少没什么大坑,比较成熟

  1. 编译工具cmake+包管理工具vcpkg
  2. QT

总结

记住我们的结论: C/C++应该算有限跨平台语言,必须依赖于严格的规范 才可以跨平台运行。
另外跨平台开发,千万不要重复造轮子,学会借助已有的第三方库,省时省力!

参考资料

个人使用过的跨平台 c++ 开源库
值得推荐的C/C++框架和库
一款专为开发C及C++所设计的跨平台IDE

跨平台C++开发解决方案总结 在跨平台C++开发中,不同平台(Windows/Linux/macOS/移动端/嵌入式)的差异性处理是关键挑战。 阅读详情

相关推荐

C++ 学习路线:快速入门到进阶

C/C++ 是一门底层、细粒度、功能强大、学习曲线陡峭的语言,掌握这门语言的程序员通常有着更长的生命周期以及更深的护城河。但入门门槛高也是不争的事实,这篇文章把C++学习划分为入门、进阶、深入三个阶段,每步提供相应的学习方法和资源,帮助大家更好地掌握这门语言。

于小咸的博客 6066

C++跨平台开发注意事项(Win/Linux) 【一】

随着多系统的普及,不少软件面临跨平台的需求,普通 Windows PC 端可以使用的代码,需要在另一个平台下编译和运行。以 Linux 平台为例,整理了从 Windows 平台上的可编译代码到 Linux 平台上代码移植问题,以及跨平台开发的建议规范与需要注意的事项。 Windows 平台上的 MSVC 编译器容错率比较高,部分代码问题编译器会自动纠正或忽略,但是 Linux 下的 gcc/g++ 比较严格,且运行环境、库不一致,Windows 下可编译的代码,直接在 Linux 下编译会产生很多问题。

Loup&卡普的博客 4713

CPP从入门到精通1:入门

现在是2024年4月15日,我决定从头开始记录C++的学习历程。参考的书籍是巨著《C Primer Plus》第五版的中文版。在正式开始学习之前首先简单介绍一下C++及其前身C语言。

qq_25874947的博客 753

跨平台C、C++代码注意的事项及如何编写跨平台的C/C++代码

跨平台C、C++代码注意的事项及如何编写跨平台的C/C++代码

prochsh的专栏 2357

C++跨平台开发要点

C++跨平台开发要点 一、跨平台开发核心原则 1. 分层架构设计    - 平台抽象层 (PAL):封装系统调用(文件、网络、线程)    - 核心逻辑层:完全平台无关的业务代码    - UI/呈现层:选择跨平台渲染方案(如OpenGL、Vulkan)

热土程序园,利他愉己~ 1056

C++学习:0、CPP 学习概述

目录一、汇编的重要性1、学习建议2、代码本质的挖掘3、编程语言的本质区别二、开发环境的搭建 路线大纲: 常用语法: 面向对象: 项目实战: 特点: 通过反汇编,通过底层来观察 C++ 的本质 CPP 的应用领域 思考一个问题:既然 C ++ 执行效率这么高,为什么还要出现新的编程语言?所有地方都用 C++ 不就好了吗? 首先每一门编程语言都有自己的优缺点,都有自己的擅长的领域。 比如 python 适合数学家来进行算法开发,适合分析师进行数据分析,如果让数学家和分析师再学习C++ 那就太

vincent3678的博客 7711

Cpp入门基础

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2401_86658278的博客 5201

C++编程新手到高手:CS42Cpp课程学习之路

本文还有配套的精品资源,点击获取 简介:"CS42Cpp"课程设计为初学者提供了一个系统的C++学习路径,涵盖了从基础知识到高级概念的全面内容。课程分为两个部分:前4周的基础阶段,后16周的深入阶段,逐渐引导学员掌握C++的语法、面向对象编程、高级特性如模板和STL使用。课程利用"CS42Cpp-master"资源包提供实践材料,帮助学员通过实际编码提高编程技能和解决问题的...

weixin_35982453的博客 1606

5步精通RedPanda-CPP:轻量级C++ IDE跨平台开发实战指南

RedPanda-CPP是一款基于Qt框架开发的轻量级C/C++集成开发环境(IDE),以其高效的编译系统、直观的用户界面和跨平台特性,成为开发者日常编程的理想选择。本文将通过"认知→准备→实践→优化"的递进式框架,帮助你从零开始掌握这款强大工具的安装配置与高级应用技巧。 ## 一、核心功能解析:RedPanda-CPP能为你做什么 RedPanda-CPP作为一款专注于C/C++开发的轻量级

gitblog_00500的博客 1026

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5871

贝加莱Automation Studio 4.10安装保姆级教程:从官网下载到解决.Net 3.5报错

本文提供贝加莱Automation Studio 4.10的详细安装教程,涵盖从官网下载到解决.Net 3.5报错的全过程。特别针对工业自动化开发环境中常见的.Net Framework 3.5安装问题,提供多种经过验证的解决方案,包括控制面板安装、DISM命令离线安装和手动下载安装包等方法,帮助工程师顺利完成PLC开发环境的搭建。

weixin_30955617的博客 718

CPP入门

CPP入门知识,为之后的学习做铺垫

weixin_54832720的博客 1334

Axure RP9 利用中继器实现列表数据的切换,分页器数据的动态交互加载

Axure RP9 利用中继器制作分页组件 在原型制作中,如何实现分页数据的动态加载、分页与数据的交互,每页显示条数的设定。下面通过制作五年级一班成绩单分页列表,分享给大家,适合有一定axure使用基础的人员,如有更好的方案,请多多指教。 最终效果图: 步骤1:首先利用中继器画出成绩单列表,并绑定成绩单数据。 步骤2:画出每页显示条数控制下拉框,利用中继器画出分页组件 步骤3:新增全局标量maxpage(显示的最多页码),minpage(显示的最小页码),i(循环计数),j(最循环数),selectpa

shandongmike的博客 6819

零基础入门RedPanda-CPP:三步掌握跨平台IDE开源编程工具

欢迎来到RedPanda-CPP的世界!这是一款像多功能工具刀一样轻巧强大的开源编程工具,支持Windows、Linux和macOS系统,特别适合C/C++和GNU汇编语言开发。无论你是刚入门的编程小白,还是需要高效开发环境的老手,这款跨平台IDE都能满足你的需求。接下来,让我们用三个简单步骤,带你从安装到精通这个强大的开发工具! ## 一、认识RedPanda-CPP:你的编程好帮手 ###

gitblog_00041的博客 956

微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南

本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。

b3n4m5q6w7的博客 338

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 320

Log4cpp 中的跨平台类库

Log4cpp 是 Log4J 的 C++ 移植版本,开放源代码并且完全免费。与 Log4J 能够跨平台一样,Log4cpp 也致力于写出跨平台的 C++ 程序。Log4cpp 主要是用于 C++ 程序中写 log 文件,与此同时,Log4cpp 中有很多有用的类库,对于写跨平台 C++ 程序的人来说,可以直接拿来用,或者作为自己写跨平台类的参考。Log4cpp 中的跨平台类库有明显的 Jav

jacklondon的专栏 5506

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

C++从入门到实战(一)C++入门基础

在本次博客系列中,我们将全面深入地探索C++这门强大编程语言的奥秘。在开启C++学习之旅前,数据结构知识的储备至关重要。数据结构作为编程的基石,能帮助我们更高效地组织和管理数据,从而让C++编程更加得心应手。关于数据结构的详细内容,可通过我的数据结构博客链接进行深入学习。废话不多说,下面开始我们C++第一节的内容吧。

2402_83322742的博客 2707

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 713

AI时代的软件质量保证新方法论

3.2.1 质量保证的方法论 质量保证(Quality Assurance, QA)是一种系统化的方法,用于确保产品或服务符合预定的质量标准。在AI时代,软件质量保证的方法论需要适应不断变化的AI技术和应用场景。 3.2.1.1 质量管理体系的构建 首先,构建一个完善

AI天才研究院 1356

推荐开源项目:CPP C++ Papyrus

推荐开源项目:CPP C++ Papyrus 项目介绍 CPP C++ Papyrus 是一个全面的C++编程资源库,由Caio Rodrigues Soares精心编撰和维护。这个开源项目旨在为开发者提供C++语言的核心概念、标准库、工具以及各种应用领域的实例代码和示例。无论你是初学者还是经验丰富的程序员,都能在这个项目中找到你需要的知识点和实践案例。 项目技术分析 该项目涵盖了C++的各个方面...

gitblog_00003的博客 939

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【C++】11 Visual Studio 2019 C++安装matplotlib-cpp绘图

使用C++调用matplotlib-cpp绘图

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 9395

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++从入门到放弃之:Hello.cpp

C++ 从入门到放弃Hello.cpp1. 创建c++程序源代码2. C++程序的编译3. C++扩展名4. C++头文件5. C++输入输出流 Hello.cpp 1. 创建c++程序源代码 vim hello.cpp #include <iostream> int main(void){ std::cout << "hello world" << std::endl; return 0; } 2. C++程序的编译 预处理 编译: 检查语法 汇编:

34hz 1547

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【C++入门 一 】学习C++背景、开启C++奇妙之旅

学习C++背景知识、开启C++学习之旅

分享学习知识地方 1763

Arduino 入门学习笔记(一):背景了解

Arduino入门学习笔记,本文主要记录Arduino的相关背景知识。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 700
上一篇: 工程实践之路:C++接口设计中的工厂模型
下一篇: C++跨平台(二):grpc和zmq的方案预研
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值