next up previous contents
下一节: 10.6 附加注释 上一级: 10 将应用程序移植到 前一节: 10.4.3 进程控制在

10.5 可移植的条件编译

如果您需要修改现有代码以将其移植到 Linux,您可能需要使用ifdef...endif对来包围 Linux 特定代码的部分——或者,就此而言,对应于其他实现的代码。选择要基于操作系统编译的代码部分的真实标准并不存在,但许多程序使用诸如定义以下的约定SVR4用于 System V 代码,BSD用于 BSD 代码,以及linux用于 Linux 特定代码。

Linux 使用的 GNU C 库允许您通过在编译时定义各种宏来启用库的各种功能。这些是

如果您定义_BSD_SOURCE自己,则额外的定义_FAVOR_BSD将为库定义。 这将导致在某些情况下选择 BSD 行为而不是 POSIX 或 SVR4。例如,如果_FAVOR_BSD被定义,则 setjmplongjmp 将保存和恢复信号掩码,并且 getpgrp 将接受 PID 参数。 请注意,您仍然必须链接到libbsd以获得本文前面提到的功能的类 BSD 行为。

在 Linux 下,gcc自动定义了许多您可以在程序中使用的宏。这些是

许多程序使用
  #ifdef linux
来包围 Linux 特定代码。 使用这些编译时宏,您可以轻松地调整现有代码,以包含或排除将程序移植到 Linux 所需的更改。 请注意,由于 Linux 通常支持更多类似 System V 的功能,因此对于为 System V 和 BSD 编写的程序,最好的代码库可能是 System V 版本。 或者,您可以从 BSD 基础开始并链接到libbsd.


next up previous contents
下一节: 10.6 附加注释 上一级: 10 将应用程序移植到 前一节: 10.4.3 进程控制在

转换于
Fri Mar 29 14:43:04 EST 1996