我有一个C ++应用程序,该应用程序使用Mac OS的Wine和Linux的Wine来运行。我正在寻找一种使用C ++检测主机操作系统的方法。
我发现的唯一发现是一种使用Wine_get_version来检测是否为Wine的方法,但是我仍然需要将Mac OS和Linux运行分开。
有什么想法怎么做?
谢谢!
答案 0 :(得分:2)
正如@NathanOliver在评论中提到的那样,您应该为此使用wine_get_host_version()
。与wine_get_version()
一样,您需要使用GetProcAddress()
从NTDLL获取函数指针。函数指针的C函数签名为:
void (CDECL *)( const char **sysname, const char **release )
您提供两个const char*
变量的地址,wine_get_host_version()
将它们设置为指向两个字符串。字符串是uname()
系统库函数输出的字符串。 (如果您对输出不感兴趣,可以为该参数传递NULL
。)
对于macOS,*sysname
将设置为指向"Darwin"
。我相信,对于Linux,它将指向"Linux"
。 (它在我测试过的几个系统上都做了,但是我不知道那是多么的一致。)
答案 1 :(得分:1)
我们需要检查编译器定义的宏(GNU GCC 或 G++) 用于检查我们的 c/c++ 脚本正在执行的操作系统。
#include <stdio.h>
int main()
{
#if __APPLE__
// apple specific code
#elif _WIN32
// windows specific code
#elif __LINUX__
// linux specific code
#else
// general code or warning
#endif
// general code
return 0;
}