如何测试POSIX兼容性?

时间:2012-04-28 23:01:48

标签: c linux testing posix compatibility

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

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

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

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

修改

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

2 个答案:

答案 0 :(得分:5)

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

这无法帮助您检测来自缺少POSIX功能的某些系统的问题(例如,OSX中断并且在我检查时缺少工作sem_init,即使它在POSIX中是必需的),或者写入依赖于POSIX标准接口中的非标准行为的代码(例如,在传递给regcomp的表达式中使用GNU正则表达式扩展)但它将帮助您捕获任何意外使用接口不在标准中。

答案 1 :(得分:1)

如果你想为其他系统编译,你通常不需要拥有其他系统,只需要一个合适的cross compiler