我正在尝试在编译时检测Solaris/SunOS版本,以便启用/禁用port_create()和其他API的使用。
在编译时是否有标头标识SunOS/Solaris版本?
发布于 2015-08-16 19:16:30
如果没有头文件提供此信息,您当然可以解析uname的输出,并从构建脚本/makefile/生成-D预处理器选项...
发布于 2015-08-17 01:38:03
根据@meaning-matters的建议,可以进行编译时定义,比如SUN_VERSION使用uname -r的输出。这实际上给出了一个浮点数,例如5.10,您可以使用简单的sed命令将其转换为预处理器可比的形式,例如以下编译器选项:
-DSUN_VERSION=`uname -r | sed -e 's/\.\([0-9]\{1,1\}\)$/0\1/' -e 's/\.//'`为5.10生成510,为5.9生成509,等等。
在源程序中,您可以这样使用它
#if SUN_VERSION >= 510(或者任何有意义的东西)。
发布于 2015-08-19 04:08:54
识别操作系统版本以断言API是否可用是有风险的,如果没有失败的话。您不能假设API将留在未来的版本中,也不能假设它在并行分支中可用(例如,Illumos vs Solaris11,这两个版本都报告了SunOS 5.11 )。
解决这个问题的通常方法是通过编译一个小的测试源代码来确定API是否可用。这通常是在一个传统上称为configure的脚本中完成的,该脚本根据您的系统构建一个Makefile和一个include文件。
https://stackoverflow.com/questions/32034061
复制相似问题