我有一个C++应用程序,它使用Wine for mac和Wine for Linux运行。我正在寻找一种方法来检测使用C++的主机操作系统。
我找到的唯一方法是检测它是否是Wine (使用wine_get_version),但我仍然需要将mac和Linux的运行分开。
你知道该怎么做吗?
谢谢!
发布于 2019-05-24 03:31:36
正如@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"
。(在我测试的几个系统上确实如此,但我不知道这是否一致。)
发布于 2021-02-21 17:02:54
我们需要检查由编译器(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;
}
https://stackoverflow.com/questions/56277858
复制相似问题