intrin.h ошибка mingw: нет такого файла или каталога

Я знаю это #include<intrin.h>" специфичен для Windows (и работает в MSVS), но выдает ошибку, когда я пытаюсь скомпилировать с помощью MINGW: fatal error: intrin.h: No such file or directoryКак мне решить эту проблему и заставить ее скомпилировать в MINGW?

К вашему сведению, это то, что у меня есть в моем.cpp, где он жалуется и указывает на:

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

1 ответ

Хотя этот вопрос старый, он заслуживает определенного ответа, поскольку это относительно важная тема для современных компиляторов C/C++ и охватывает проблему переносимости между компиляторами с точки зрения написания кода с низкого уровня на средний.

Внутренности по своей природе, как правило, не переносимы. Какие встроенные функции будет предоставлять компилятор и как он их предоставит, будет отличаться от другого компилятора.

В вашем случае MSVC определен в каталоге include для MSVC — он будет в вашей папке Program Files для Visual Studio. Файлы заголовков в этом каталоге не распознаются MinGW по умолчанию. В зависимости от того, к каким встроенным функциям вы пытаетесь получить доступ и какой компилятор вы используете, вам придется включать разные заголовки или обращаться к разным функциям.


Например, для доступа к x86 CPUIDинструкция, объявленная в <intrin.h>для MSVC вам придется использовать <cpuid.h>вместо этого с MinGW. Это означает, что вам потребуется условная компиляция для разных компиляторов, которые поддерживает ваш код, как и для разных операционных систем, которые поддерживает ваш код:

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

Для дальнейшего чтения рекомендую:

Другие вопросы по тегам