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

Posted CodeBowl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++跨平台学习:入门了解相关的知识,希望对你有一定的参考价值。

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

跨平台开发说的是什么

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

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

  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++跨平台学习:入门了解的主要内容,如果未能解决你的问题,请参考以下文章

课程总结

Java学习入门--JDKJREJVM三者间的关系

QT从入门到进阶(珍藏版)

JavaSE第01篇:Java快速入门

c++11多线程入门<学习记录;

RK3399平台入门到精通系列讲解(导读篇)21天学习挑战介绍