c - gcc编译错误: "inlining failed in call to always_inline" even after setting cflags environment variable

标签 c gcc

我正在 Ubuntu-16.04 中构建一个 c 程序。正如另一个答案之一所示 here ,我已经设置了 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

海湾合作委员会版本

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。 DPDK makefile 应该处理所有这些细节。

关于c - gcc编译错误: "inlining failed in call to always_inline" even after setting cflags environment variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47587561/

相关文章:

gcc - 禁用动态内存分配?

c - "svc"是否有任何 gcc 编译器原语?

c - 我用 C 编写的库的最佳实践

c - Linux C : upon receiving a signal, 是否可以知道发送者的PID?

C程序列出文件

c++ - 递归嵌套模板——gcc 错误?

c++ - 如何防止静态库中的重复符号?

c - DDD 替代方案,它也绘制了数据结构的漂亮图片

c - 删除硬件id对应的oem.inf文件

c - 结构数组错误