Ошибка компиляции gcc: "inlining failed in call to always_inline" даже после установки переменной среды cflags

Вопрос:

Я создаю программу ac в Ubuntu-16.04. Как следует в одном из других ответов здесь, я установил переменную enfliorment cflag, и я запускаю команду gcc, как показано ниже

export  CFLAGS="-msse4.1"
gcc -o dpdkif_user.o -O2 -g -Wno-format-zero-length -Wno-pointer-sign -Werror -I/home/nikhil/projects/drv-netif-dpdk/rumptools/dest/usr/include -U_FORTIFY_SOURCE -DVIRTIF_BASE=dpdk -I/home/nikhil/projects/drv-netif-dpdk/src/libdpdkif/virtif -I/home/nikhil/projects/dpdk/build/include -c dpdkif_user.c

Версия Gcc

cc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Тем не менее, я все еще вижу следующую ошибку:

/usr/lib/gcc/x86_64-linux-gnu/5/include/tmmintrin.h:185:1: error: inlining failed in call to always_inline ‘_mm_alignr_epi8: target specific option mismatch
_mm_alignr_epi8(__m128i __X, __m128i __Y, const int __N)
^
In file included from /home/nikhil/projects/dpdk/build/include/rte_ether.h:50:0,
from dpdkif_user.c:47:
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:641:13: error: called from here
_mm_storeu_si128((__m128i *)((uint8_t *)dst + 1 * 16), _mm_alignr_epi8(xmm2, xmm1, offset));    \
^
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:681:16: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47_IMM
case 0x0F: MOVEUNALIGNED_LEFT47_IMM(dst, src, n, 0x0F); break;    \
^
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:821:2: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47

Что мне не хватает? Любая помощь с этим очень ценится.

Лучший ответ:

Несовпадение определенной опции цели причины сбоя означает, что вставка не удалась, потому что программа вызывает всегда встроенную функцию с определенным атрибутом цели из другой функции, которая не поддерживает эту цель. Это действительно то, что не поддерживается: компилятор не может одновременно скомпилировать функцию для использования определенных функций микроархитектуры (всегда встроенная функция) и не использовать их (функция, в которую встроен).

В данном конкретном случае причина, по-видимому, заключается в том, что источники DPDK используют встроенные функции компилятора, но вы не компилируете с необходимой опцией подзадачи. Возможно, вы установили переменную CFLAGS, но, похоже, она не влияет на компиляцию (она не является частью командной строки, которую вы указали). Кроме того, для tmmintrin.h требуется -mssse3, а не -msse4.1. Makefile файлы DPDK должны позаботиться обо всех этих деталях.

Ответ №1

Я встретил этот похожий вопрос:

avx512fintrin.h: 368: 1: ошибка: не удалось выполнить встраивание при вызове always_inline ‘_mm512_load_ps: несоответствие конкретной целевой опции

Оцените статью
TechArks.Ru
Добавить комментарий