我知道#include<intrin.h>"
是特定于Windows的(并且在MSVS中运行)但在我尝试使用MINGW进行编译时会生成错误:fatal error: intrin.h: No such file or directory
我如何解决这个问题并让它在MINGW中编译?
仅供参考,这就是我在.cpp中所抱怨和指向的内容:
...
#elif defined(WIN32)
#include <intrin.h>
...
答案 0 :(得分:0)
虽然这个问题已经很老了,但它值得某种形式的回答,因为它是现代 C/C++ 编译器的一个相对重要的主题,涵盖了编译器之间在编写低级到中级代码方面的可移植性问题。< /p>
内部函数由于其性质,通常是不可移植的。编译器将提供哪些内在函数以及如何提供这些函数与其他编译器不同。
特别是在您的情况下,MSVC 的 <intrin.h>
是在 MSVC 的包含目录中定义的——这将在您的 Visual Studio 的 Program Files 文件夹中。默认情况下,MinGW 无法识别此目录中的头文件。根据您尝试访问的内在函数和使用的编译器,您必须包含不同的标头或访问不同的函数。
例如,要访问在 CPUID
中为 MSVC 声明的 x86 <intrin.h>
指令,您必须将 <cpuid.h>
与 MinGW 结合使用。这意味着您需要针对代码支持的不同编译器进行条件编译,就像代码支持的不同操作系统一样:
#if defined(_WIN32)
#if defined(__GNUC__)
#include <cpuid.h>
#elif defined(_MSC_VER)
#include <intrin.h>
#else
...
#endif
#else
...
#endif
我推荐进一步阅读: