如何检测Wine是从Linux还是从C ++的mac OS环境运行?

时间:2019-05-23 14:50:56

标签: c++ linux macos wine

我有一个C ++应用程序,该应用程序使用Mac OS的Wine和Linux的Wine来运行。我正在寻找一种使用C ++检测主机操作系统的方法。

我发现的唯一发现是一种使用Wine_get_version来检测是否为Wine的方法,但是我仍然需要将Mac OS和Linux运行分开。

有什么想法怎么做?

谢谢!

2 个答案:

答案 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;
}

some more macros