Как справиться с "intrin.h: нет такого файла или каталога"?

#include <intrin.h>

В приведенном выше сообщении сообщается:

intrin.h: No such file or directory

Кажется, что это заголовочный файл MSVC, но я использую eclipse cdt, как я могу сделать его доступным? Есть ли какие-то библиотеки?

cdt использует MinGW для компиляции, но нет intrin.h:

D:\Tools\MinGW\lib\gcc\mingw32\3.4.5\include>dir *intrin.h

2006-01-17  21:47            34,528 emmintrin.h
2006-01-17  21:47            22,281 mmintrin.h
2006-01-17  21:47             3,586 pmmintrin.h
2006-01-17  21:47            30,925 xmmintrin.h

Может ли кто-нибудь помочь?

Ответ 1

Это заголовок, который объявляет кучу "intrinsics" - функций, встроенных в компилятор, чтобы он мог испускать встроенный код для них. Если вы используете VС++ в качестве компилятора, он должен находиться в том же каталоге с другими стандартными заголовками. Если вы используете другой компилятор, вам нужно изменить встроенные функции в соответствии с используемым вами компилятором. Например, gcc имеет множество аналогичных встроенных функций, но имеет несколько разные имена.

Изменить: учитывая, что вы используете MinGW (I.e., gcc), вы в значительной степени застреваете с портированием кода (или с помощью VС++). Если вы имеете дело с довольно небольшим количеством кода, один из способов сделать это - прокомментировать строку, содержащую этот заголовок, и попытаться ее скомпилировать. Компилятор укажет на ошибки, в которых встроенные функции были использованы, а gcc - нет. Затем вы можете просмотреть их (например, на MSDN) и попытаться найти то, что gcc делает, что делает (достаточно близко) одну и ту же вещь. В зависимости от того, что он использует (и насколько), что может быть быстрым и легким, или может быть проще начать с создания нового кода, чтобы сделать то же самое.

Исходные заголовки *, которые вы нашли, будут (вероятно) содержать декларации (по крайней мере некоторых) gcc-аналогов Microsoft, которые вам нужно заменить. Вы, вероятно, в конечном итоге будете использовать их в процессе портирования кода, поэтому не забывайте о них. В то же время, просто включение этих заголовков вместо Microsoft почти наверняка не заставит работать код.

Ответ 2

У меня такая же проблема. используя eclipse + cdt + mingw32-gcc7.2 + glm (openGL math libraty) Я заменяю #include <intrin.h> на #include <x86intrin.h> флаг добавления в gcc -msse2 и все работает.