4

我正在使用 POSIX API 并使用 Linux 编写 C 程序。我在朋友的 Mac OSX PC 上编译并运行它,有一个小错误,但我没有使用 Linux 特定的功能。

我将使用 Linux 添加到 API 的一些特定功能。我还将为 Mac Os X 和 FreeBSD 使用特定的 POSIX 扩展。
我将使用条件编译来选择代码。如果操作系统不是这些,我将使用通用 POSIX 代码。

我没有 Darwin/Mac OSX 和 FreeBSD,Linux 是我 PC 中唯一的操作系统。我无法下载和安装 FreeBSD,因为它超过 500 MB。
我想知道一种方法来测试程序是否会在其他 POSIX 系统上按预期编译和运行。
我想知道是否有 POSIX 模拟器和编译器来进行测试。
测试很简单,它们不使用 GUI 和驱动程序,它们只是命令行。

我需要做 3 个测试:FreeBSD、Mac OSX/Darwin 和 Generic POSIX,但我没有工具。

编辑

是否有没有 GUI 的 FreeBSD 和 Darwin 的最小版本,但有 GCC/G++ 和 ssh/scp?达尔文是自由的,不是吗?
我的电脑很旧,但我想我可以将它们安装在虚拟机中,创建虚拟网络并使用 ssh/scp 传输和测试程序。

4

2 回答 2

6

一种简单的方法是使用适当的功能测试宏编译您的程序。例如,如果您定义_POSIX_C_SOURCEPOSIX 的目标版本(当前200809L),您将请求系统标头向您的程序公开任何内容,除了 POSIX 基础需要/允许的内容。这可以通过命令行 CFLAGS 和-D_POSIX_C_SOURCE=200809L. 如果您想要 XSI 选项(完整的 Single Unix Standard 功能,它是 POSIX 基础的超集),请-D_XOPEN_SOURCE=700改用。

这不会帮助您检测来自缺少 POSIX 功能的某些系统的问题(例如,OSX 已损坏并且缺少sem_init我检查的最后一个工作,即使它在 POSIX 中是强制性的),或者来自编写依赖于非标准行为的代码在 POSIX 标准接口中(例如,在您传递给的表达式中使用 GNU 正则表达式扩展regcomp),但它会帮助您捕获任何不符合标准的接口的意外使用。

于 2012-04-29T00:00:16.343 回答
1

如果你想为其他系统编译,你通常不需要其他系统,你只需要一个合适的交叉编译器

于 2012-04-28T23:03:51.840 回答