C++的可移植性和跨平台开发[1]:编译器

在跨平台的开发过程中,很多问题都和编译器有关。因此我们先来聊聊编译器相关的问题 。

★编译器的选择

首先,GCC是优先要考虑支持的,因为几乎所有操作系统平台都有GCC可用。它基本上成了 一个通用的编译器了。如果你的代码在A平台的GCC能够编译通过,之后拿到B平台用类似版本 的GCC编译,一般也不会有太大问题。因此GCC是肯定要考虑支持的。

其次,要考虑是否支持本地编译器。所谓本地编译器就是操作系统厂商自产的编译器。例 如相对于Windows的本地编译器就是Visual C++。相对于Solaris的本地编译器就是SUN的CC。 如果你对性能比较敏感或者想用到某些本地编译器的高级功能,可能就得考虑在支持GCC的同 时也支持本地编译器。

★编译警告

编译器是程序员的朋友,很多潜在的问题(包括可移植性),编译器都是可以发现并给出 警告的,如果你平时注意这些警告信息,可以减少很多麻烦。因此我强烈建议:1把编译器的 警告级别调高;2不要轻易忽略编译器的警告信息。

★交叉编译器

交叉编译器的定义参见“维基百科”。通俗地说,就是在A平台上编译出运行 在B平台上的二进制程序。假设你要开发的应用是运行在Solaris上,但是你手头没有能够运 行Solaris的SPARC机器,这时候交叉编译器就可以派上用场了。一般情况下都使用GCC来制作 一个交叉编译器,限于篇幅,这里就不深入聊了。有兴趣的同学可以参见"这里" 。

关于编译器的话题,暂时聊到这,后面聊聊关于“语法”的问题。

原始地址:http://program-think.blogspot.com/

时间: 2024-11-01 08:39:31

C++的可移植性和跨平台开发[1]:编译器的相关文章

C++的可移植性和跨平台开发[5]:操作系统

上一个帖子提到了"硬件体系"相关的话题,今天来说说和操作系统相关的话题 .C++跨平台开发中和OS相关的琐事挺多,所以今天会啰嗦比较长的篇幅,请列位看官见谅 :-) 为了不绕口,以下把Linux和各种Unix统称为Posix系统. ★文件系统(FileSystem以下简称FS) 刚开始搞跨平台开发的新手,多半都会碰上和FS相关的问题.所以先来聊一下FS.归纳下 来,开发中容易碰上的FS差异主要有如下几个:目录分隔符的差异:大小写敏感的差异:路 径中禁用字符的差异. 为了应对上述差异,你

C++的可移植性和跨平台开发[4]:硬件体系相关

这次聊的话题主要是和硬件体系有关的.比如你的程序需要支持不同类型的CPU(x86.SPARC.PowerPC),或者是同种类型不同字长的CPU(比如x86和x86-64),这时候你就需要关心一下硬件体系的问题. ★基本类型的大小 C++中基本类型的大小(占用的字节数)会随着CPU字长的变化而变化.所以,假如你要表示一个int占用的字节数,千万不要直接写"4"(顺便说一下,直接写"4"还犯了Magic Number的大忌,详见这里),而应该写"sizeof(

C++的可移植性和跨平台开发[3]:异常处理

上一个帖子"语法"由于篇幅有限,没来得及聊异常,现在把和异常相关的部 分单独拿出来说一下. ★小心new分配内存失败 早期的老式编译器生成的代码,如果new失败会返回空指针.我当年用的Borland C++ 3.1 似乎就是这样的,现在这种编译器应该不多见了.如果你目前用的编译器还有这种行为,那 你就惨了.你可以考虑重载new操作符来抛出bad_alloc异常,便于进行异常处理. 稍微新式一点的编译器,就不是仅仅返回空指针了.当new操作符发现内存告急,按照标 准的规定(参见03标准1

C++的可移植性和跨平台开发[2]:语法

目前还有相当一部分开发人员在使用老式编译器干活,这些老式编译器可能对C++98支持 不够.因此,当你的代码移植到这些老式的编译器上时,可能会碰到一些稀奇古怪的问题( 包括编译出错和运行时错误).下面这些注意事项有助于你绕过这些问题. 强调一下 ,后面提到的好几个条款都是通过回避C++的新语法来保证移植性.如果你用的是新式编译器 ,那么你可以不理会这些条款. ★小心for循环变量的作用域(不支持新标准) 在C++98标准中,for循环变量的作用域局限在循环体内.而某些老的编译器(例如 Visual

跨平台开发时代的 (再次) 到来?

这篇文章主要想谈谈最近又刮起的移动开发跨平台之风,并着重介绍和对比一下像是Xamarin,NativeScript 和 React Native 之类的东西.不会有特别深入的技术讨论,大家可以当作一篇科普类的文章来看. 故事的开始 "一次编码,处处运行" 永远是程序员们的理想乡.二十年前 Java 正是举着这面大旗登场,击败了众多竞争对手.但是时至今日,事实已经证明了 Java 笨重的体型和缓慢的发展显然已经很难再抓住这个时代快速跃动的脚步.在新时代的移动大潮下,一个应用想要取胜,完美

Visual Studio跨平台开发实战(1) - Hello Xamarin!

原文 Visual Studio跨平台开发实战(1) - Hello Xamarin! 前言 应用程式发展的脚步, 从来没有停过. 从早期的Windows 应用程式, 到网路时代的web 应用程式, 再到近几年相当盛行的行动装置应用程式(Mobile Application), 身为C#的开发人员与Visual Studio的使用者. Windows Phone与Windows Store App的开发是否已满足不了你了呢? 如果能够让你使用C#及Visual Studio 来开发iOS及And

arcgis-Qt 结合ArcGIS for Qt SDK跨平台开发

问题描述 Qt 结合ArcGIS for Qt SDK跨平台开发 刚接触Qt,ESRI针对Qt推出的SDK也不太了解,二者结合进行跨平台开发,现在连helloword都编译失败,求大神指点. 解决方案 sdk正确安装了么?安装好了能直接创建地图的工程啊

为什么移动端跨平台开发不靠谱?

本文讲的是为什么移动端跨平台开发不靠谱?, 前言 翻墙偶然读到一篇不错的文章,随手翻译,作者是jielse发表于androidHub. 台风过后的城市 随着智能手机的发明,许多开发人员都提出了同样的问题:如何为多个移动平台构建和发布应用程序? 包括最初的iPhone和BlackBerries,Android,以及Windows Phone和Web. 每个平台单独发布应用程序是很昂贵的.我们最初的想法: 肯定有一个解决方案可以降低开发多个应用的成本.但是事实是不是这样的呢? 在Pixplicity

Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发

原文 Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发 前言 大部份的Andr​​oid 都具有实体或虚拟的Back键. 因此在处理多页面应用程式时, 与先前所介绍的iOS Navigation controller 比较起来会简单许多. 1. 开启Visual Studio 并新增Android Application 专案并命名为Lab4-MultiScreen   2. 在Layout资料夹中新增Second.axml   在Second