我正在 Ubuntu-16.04 中构建 ac 程序。正如这里的另一个答案之一所示,我已经设置了 cflag 环境变量,并且正在运行 gcc 命令,如下所示
\n\nexport CFLAGS="-msse4.1"\ngcc -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\nRun Code Online (Sandbox Code Playgroud)\n\n海湾合作委员会版本
\n\ncc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我仍然看到以下错误:
\n\n/usr/lib/gcc/x86_64-linux-gnu/5/include/tmmintrin.h:185:1: error: inlining failed in call to always_inline \xe2\x80\x98_mm_alignr_epi8\xe2\x80\x99: target specific option mismatch\n _mm_alignr_epi8(__m128i __X, __m128i __Y, const int __N)\n ^\nIn file included from /home/nikhil/projects/dpdk/build/include/rte_ether.h:50:0,\n from dpdkif_user.c:47:\n/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:641:13: error: called from here\n _mm_storeu_si128((__m128i *)((uint8_t *)dst + 1 * 16), _mm_alignr_epi8(xmm2, xmm1, offset)); \\\n ^\n/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:681:16: note: in expansion of macro \xe2\x80\x98MOVEUNALIGNED_LEFT47_IMM\xe2\x80\x99\n case 0x0F: MOVEUNALIGNED_LEFT47_IMM(dst, src, n, 0x0F); break; \\\n ^\n/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:821:2: note: in expansion of macro \xe2\x80\x98MOVEUNALIGNED_LEFT47\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n我缺少什么?非常感谢任何对此的帮助。
\n内联失败原因目标特定选项不匹配意味着内联失败,因为程序从不支持该目标的另一个函数调用具有特定目标属性的始终内联函数。这确实是不支持的:编译器不能既编译函数以使用某些微架构功能(始终内联函数)又不使用它们(内联的函数)。
在这种特殊情况下,原因似乎是 DPDK 源使用编译器内部函数,但您没有使用必要的子目标选项进行编译。您可能已经设置了该CFLAGS变量,但它似乎对编译没有任何影响(它不是您引用的命令行的一部分)。此外,tmmintrin.h需要-mssse3,而不是-msse4.1。DPDK makefile 应该处理所有这些细节。
| 归档时间: |
|
| 查看次数: |
18554 次 |
| 最近记录: |