本文不涉及代码和过于深入的东西,只是小白在学习过程中,记录跨平台中的一些case,希望对同样刚接触跨平台开发的小白有所帮助。
跨平台开发说的是什么
跨平台开发,最典型的就是移动时代,厂商开发一个app往往需要Android和ios上俩套东西,同时还有着非常复杂的机型。 为了解决不同操作系统终端的开发难题,跨平台技术成为了首选,为企业和开发者节省成本。
那么跨平台是什么意思呢?
- 第一种:一份代码,到处编译。比如C语言,rust。
- 第二种:一次编译,到处运行。比如Java。
- 第三种:不用编译,各自解释。比如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++的“跨平台”方式是“一套代码,到处运行”。
一点点小的经验
从事跨平台开发的第一步,就是找一个靠谱的跨屏台第三方库,之后的代码在此基础上展开,业务代码不涉及到系统相关性,一般也是跨平台的。 这里推荐几个开源的第三方跨平台库:
- STL—C++标准库,应该不用过多介绍了。
- Boost—准标准库,功能强大涉及能想的到的大部分非特别领域的算法,有一个大的C++社区支持。
- Log4cpp-------日志处理 ,功能类似java中的log4j
- Crypto++ -----加/解密算法库, 非常专业的C++ 密码学函式库
- QT ----大名顶顶的一个多平台的C++图形用户界面应用程序框架(GUI库)
- ACE—庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。http://www.cs.wustl.edu/~schmidt/ACE.html
C++跨平台工具
上面说的是语言层面的工作,写代码的时候这么写就是达到了跨平台的需求,下面就是工程化恶的问题了。 工具主要分为编译工具和包管理工具。 这里作者只用过俩套,所以只推荐这俩套,至少没什么大坑,比较成熟
- 编译工具cmake+包管理工具vcpkg
- QT
总结
记住我们的结论: C/C++应该算有限跨平台语言,必须依赖于严格的规范 才可以跨平台运行。 另外跨平台开发,千万不要重复造轮子,学会借助已有的第三方库,省时省力!
参考资料
个人使用过的跨平台 c++ 开源库 值得推荐的C/C++框架和库 一款专为开发C及C++所设计的跨平台IDE
|