背景
我们在开发过程中经常需要进行程序移植。由于不同硬件环境、操作系统和各类依赖库版本的差异,会出现各种兼容性问题。
对于glibc来讲,除了C语言标准之外,还包含了posix、systemV等特性。为此,glibc针对不同的标准有特定的宏定义,用于指定当前代码说遵循的标准和版本。这些宏定义被称为特性测试宏(feature test macro)。
1. 标准概述
1.1 C语言标准
主要包含C89(1989年最初的ANSI C版本)、C99(1999)、C11(2011)和C17(2017)。
1.2 BSD
BSD(伯克利软件发布版,Berkeley Software Distribution)最初是加州大学伯克利分校1979年发布的unix版本,包括了C shell,vi等功能. 由此演化成BSD的标准.
1.3 System V
AT&T1983年发布了unix系统System III,并于1989发布了System V.通过对其它厂商的使用授权使其逐渐成为很多unix功能实现的基础.
1.4 POSIX
POSIX先是称为IEEE标准,之后又被ISO采纳,因此POSIX.1为ISO/IEC 9945-1:1990. 之后陆续升级了命令与工作标准(POSIX.2)、测试方法标准(POSIX.3)、实时 API(POSIX.4)等.
1.5 F151-1和FIPS 151
FIPS 是Federal Information Processing Standard(联邦信息处理标准)于1989年发布。由于美国政府是计算机系统的“大买家”,大多数计算机厂商都会确保其UNIX系统符合FIPS 151-1版本的POSIX.1规范。 FIPS 151-2标准已在2000年被废弃。
1.6 X/Open和XPG3
X/Open公司是由多家国际计算机厂商所组成的联盟(The Open Group) ,基于POSIX的开放系统标准。包含XPG3(1989), XPG4(1992). 其接口成为XSI(X/Open System Interface).
之后经过AT&T公司等一些列转让, X/Open又将XPG4版本2“重新包装”为SUS(Single UNIX Specification)(即SUSv1)或称之为UNIX95。其内容包括:XPG4版本2,X/Open Curses规范第4号版本2,以及X/Opena联网服务(XNS)规范第4号。
SUS版本2(SUSv2,http://www.unix.org/version2/online.html)于1997年发布.
1.7 大一统 SUSv3
2001年, IEEE , The Open Group和ISO委员会共同成立奥斯汀公共标准工作组(Austin CSRG), 批准了POSIX 1003.1-2001,成为ISO/IEC 9945:2002,该标准取代了之前的POSIX版本,被称为 SUSv3. 包含了基本定义, 系统接口, shell和
移植指南:理解并应对glibc特性测试宏在程序移植中的作用

本文详细阐述了在程序移植过程中如何通过特性测试宏(如_POSIX_C_SOURCE, _XOPEN_SOURCE等)指定代码遵循的不同C标准,如POSIX, C89-C17, BSD, SystemV等,并展示了遇到API缺失时的处理策略。关键在于理解宏定义与glibc版本的关系,确保代码兼容性。
最低0.47元/天 解锁文章
1047

被折叠的 条评论
为什么被折叠?



