欢迎来到天天文库
浏览记录
ID:20499186
大小:106.50 KB
页数:15页
时间:2018-10-12
《为多个 unix 平台编写软件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、为多个UNIX平台编写软件 本文示例源代码或素材下载 开始之前 在本教程中,您将了解为了在各种UNIX®平台上实现兼容而对应用程序进行构建和迁移操作时的相关问题。我们的重点不是特定的平台差异,而是将为您提供相关知识和工具,让您自己进行决策,以便实现您的UNIX应用程序的广泛兼容性。 关于本教程 开发在多个平台上编译和构建的软件可能是一项非常复杂的任务。不同的UNIX变体间存在的各种大大小小的差异可能会导致问题。这既包括缺少工具和库的情况,又包括用于构建代码的头文件中存在差异的情况。考虑到这些差异后,您的代码的可移植性将更强,而这正是本教程中要讨论的
2、主题。您还将了解如何使用GNU自动工具,以消除迁移和开发过程中的复杂和麻烦。 先决条件 您将需要访问您系统上的C编译器,以对一些示例进行试验。为了对示例自动工具会话进行试验,您需要能够访问通过GNU网站提供的自动配置/自动工具包。 UNIX不兼容性 之所以在构建应用程序时UNIX会出现问题,是因为所有UNIX分发并非完全相同(虽然很多都是基于标准组件和理念)。理解这些差异的影响是在不同环境中构建应用程序的第一步。 背景知识 有许多不同的UNIX变体,包括各种免费版本,如各种BSD(BerkeleySystemsDivision)变体(FreeBSD、Op
3、enBSD、NetBSD)和Linux®。这些差异最初源自UNIX变体所使用的源UNIX分发。有两个源变体,来自ATT的版本(最终发展为了目前的SVR4)和加州大学伯克利分校(UniversityofCaliforniaBerkeley,UCB)所开发的版本(目前称为BSD版本)。 不同的公司的UNIX操作系统均以这其中的一个基本版本为基础,然后添加了供应商特定的扩展和增强功能。一些公司(特别是Sun)更改了其UNIX支持的源。例如,Sun就从SunOS中的BSD核心变成了在Solaris中使用SVR4核心。 SystemVRelease4是现在商业分发
4、中最常见的版本,包括基于原始ATT核心且带有一些添加的BSD元素的核心。 结果是,尽管从技术而言,不同的UNIX版本(AIX®、HP-UX、Solaris等)都是UNIX,但系统之间存在的差异意味着采用了不同的库、头文件(甚至用于进行构建的工具也不同),从而意味着无法将C源代码方便地从一个平台迁移到另一个平台。 实际函数可能没有更改;而不同的仅是函数的位置和定义。 POSIX兼容性 POSIX组织进行了大量的工作,以对各种不同系统进行标准化,包括操作系统、实用工具和编程语言。这些标准涵盖了许多方面,既包括标准函数及其应返回的内容,也包括这些函数所依赖
5、的OS的功能和特性。 对于UNIX,有关的主要POSIX标准是1003.1,该标准定义了应用程序和操作系统间的接口。 多家不同的公司均已采用了POSIX标准,包括SunMicrosystems、IBM、Digital和Hedash;大部分C代码都具有跨平台兼容性。C源代码中的大部分不兼容现象都与不同元素所依赖的库和头文件有关。 所需的库不同的UNIX变体包括一系列不同的库和工具,一些甚至可能使用第三方库作为标准库。 构建环境Makefile是大部分应用程序的标准构建环境。 所需的工具某些应用程序可能需要在希望在其中进行构建的所有平台内都具有特定工具,如ya
6、cc、lex、rpcgen和其他工具。 当然,大部分C代码都具有平台兼容性。现在的大部分C编译器都基于相关标准,因此对代码进行编译不存在问题。相反,进行移植时出现的大部分问题都与库、头文件和构建环境中的限制相关。 常见的冲突区域 在这一部分,我们将讨论一些与处理头文件、库、构建工具和环境相关的重要问题。 构建工具和环境 移植过程的核心元素是可用的构建工具和环境。如果使用标准Makefile,则这个过程要容易得多,但仍然需要考虑一些关键的差异。 例如,需要对提供的C编译器、C预处理程序和工具(yacc、lex和其他工具)进行标识。还需要考虑命令行选项和不同
7、工具的过程差异。 例如,大部分UNIX变体都提供cc作为C编译器,提供了独立的C预处理程序cpp。不过,有些人可能喜欢使用cc的命令行选项-E来运行预处理程序。 可以通过使用免费软件工具来简化环境和相关过程,如gcc、bison和flex,但同样要注意相关限制和差异。 例如,标准UNIXyacc可12345678下一页——感谢阅读这篇文章,..,创建名为y.tab.c和y.tab.h的文件(要求时),但bison将基于源名称创建文件(例如,从parser.y生成parser.tab.c)。您需要考虑此差异。 另外,也要注意位于不同平台的不同位置上的不同工
此文档下载收益归作者所有