【问题标题】:intrin.h mingw error : No such file or directoryintrin.h mingw 错误:没有这样的文件或目录
【发布时间】:2014-08-19 22:44:08
【问题描述】:

我知道#include<intrin.h>" 是特定于 Windows 的(并且在 MSVS 中运行),但是当我尝试使用 MINGW 进行编译时会产生错误:fatal error: intrin.h: No such file or directory 如何解决这个问题并让它在 MINGW 中编译?

仅供参考,这就是我在 .cpp 中抱怨和指向的内容:

...
#elif defined(WIN32)
    #include <intrin.h>
...

【问题讨论】:

  • 我对编译器内在函数不是很熟悉,但我不希望 Visual C++ 内在函数可用于 g++。反之亦然。
  • 它不是 SDK 文件,由编译器提供。 So does GCC.
  • intrin.h 是特定于 Microsoft Visual C++ 的。它不是 GCC 提供的英特尔定义的向量内在标头之一。或者就此而言,您链接的文章中列出的头文件之一。

标签: c++ mingw


【解决方案1】:

虽然这个问题很老,但它值得某种形式的回答,因为它是现代 C/C++ 编译器的一个相对重要的主题,并且涵盖了编译器之间在编写低级到中级代码方面的可移植性问题。

本质上,内在函数通常是不可移植的。编译器将提供哪些内在函数以及提供这些函数的方式与其他编译器不同。

在您的情况下,MSVC 的 &lt;intrin.h&gt; 是在 MSVC 的包含目录中定义的——这将在 Visual Studio 的 Program Files 文件夹中。默认情况下,MinGW 无法识别此目录中的头文件。根据您尝试访问的内在函数和使用的编译器,您必须包含不同的标头或访问不同的函数。


例如,要访问在 MSVC 的 &lt;intrin.h&gt; 中声明的 x86 CPUID 指令,您必须使用 &lt;cpuid.h&gt; 而不是 MinGW。这意味着您需要对代码支持的不同编译器进行条件编译,就像对代码支持的不同操作系统一样:

#if defined(_WIN32)
  #if defined(__GNUC__)
    #include <cpuid.h>
  #elif defined(_MSC_VER)
    #include <intrin.h>
  #else
    ...
  #endif
#else
  ...
#endif

我推荐的进一步阅读:

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 2010-09-10
    • 1970-01-01
    • 2012-10-30
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多