我正在用POSIX API和使用Linux编写一个C程序。 我编译并运行在朋友的Mac OSX PC上,出现了一个小错误,但是我没有使用Linux的特定function。
我将使用Linux添加到API的一些特定function。 我也将为Mac OS X和FreeBSD使用特定的POSIX扩展。
我将使用条件编译来select代码。 如果操作系统不是这些,我将使用通用的POSIX代码。
我不拥有达尔文/ Mac OSX和FreeBSD,Linux是我在我的电脑中唯一的操作系统。 我无法下载和安装FreeBSD,因为它超过了500 MB。
我想知道一种方法来testing程序是否会在其他POSIX系统上编译和运行。
我不知道是否有一个POSIX模拟器和编译器来做testing。
testing很简单,它们不使用GUI和驱动程序,它们只是命令行。
我将需要做3个testing:FreeBSD,Mac OSX / Darwin和Generic POSIX,但是我没有这些工具。
编辑
有没有GUI的FreeBSD和Darwin的最小版本,但使用GCC / G ++和ssh / scp? 达尔文是自由的,不是吗?
我的电脑是旧的,但我想我可以将它们安装在虚拟机中,创build一个虚拟networking,并使用ssh / scp来传输和testing程序。
一个简单的方法是用适当的功能测试宏编译你的程序。 例如,如果您将_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正则表达式扩展),但它将帮助您捕获任何不属于标准的接口的意外使用。
如果你想为其他系统编译,你通常不需要有其他的系统,你只需要一个合适的交叉编译器 。