技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 70|回复: 1
收起左侧

mingw编译sse指令报错

[复制链接]

15

主题

53

帖子

237

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
180 个
贡献
0 次
宅之契约
0 份
在线时间
36 小时
注册时间
2020-4-15
发表于 2020-7-5 22:46:21 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
今天好不容易把gcc的版本从4,80升级到4.93了,这个不在于版本推进了多少?
而是知道如何升级的版本的方法。
机器也换了win 10,升级的gcc可以编译代码了。

遇到的问题是,我 用 lame-3.99.5 来测试,配置完美通过,
编译报错,出错指令是sse,我怀疑我的sse的代码库没有装上的关系。
不知道如何搜索这方面的信息。

现在我无法贴出错信息,因为我现在在编译ffmpeg做测试。

In file included from xmm_quantize_sub.c:37:0:
c:\mingw\lib\gcc\mingw32\4.9.3\include\xmmintrin.h:229:1: error: inlining
failed in call to always_inline '_mm_max_ps': target specific option mismatch
_mm_max_ps (__m128 __A, __m128 __B)

出错信息

搜索到的解决方法

这个问题 添加编译选项

-mfma

没有解决掉

Viewed 4k times

1


I am building a c program in Ubuntu-16.04. As followed in one of the other
answer here, I have set the cflag enviornment variable and I am running gcc
command as shown below

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 version

cc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
However, I am still seeing the following error:

/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’
What am I missing? Any help with this is greatly appreciated.

c gcc
share  improve this question  follow
asked Dec 1 '17 at 6:08

Nikhil
1,72433 gold badges2525 silver badges4343 bronze badges
1
I don't see an MCVE here... – Tom Karzes Dec 1 '17 at 6:15
The question I've linked above is similar to what I've asked. It is extending
the already asked question – Nikhil Dec 1 '17 at 6:20
Actually, the commands you are running makes no sense at all. In the first line
you set CFLAGS, in the second line you run gcc but having nothing about CFLAGS
or -msse4.1 option in the gcc command line. If you run the command manually,
just put -msse4.1 in the gcc command, you don't need to set CFLAGS. (CFLAGS is
used for Makefile)

The inlining failure reason target specific option mismatch means that inlining
failed because the program calls an always-inline function with a specific
target attribute from another function which does not support this target. This
is really something that is not supportable: the compiler cannot both compile a
function to use certain micro-architecture features (the always-inline function)
and not use them (the function into which is inlined).

In this particular case, the cause seems to be that the DPDK sources use
compiler intrinsics, but you do not compile with the necessary subtarget
option. You may have set the CFLAGS variable, but it does not seem to have any
affect on the compilation (it is not part of the command line you quoted).
Furthermore, tmmintrin.h needs -mssse3, not -msse4.1. The DPDK makefiles should
take care of all these details.

回复

使用道具 举报

1061

主题

2452

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19569 个
贡献
40535 次
宅之契约
0 份
在线时间
1853 小时
注册时间
2014-1-26
发表于 2020-7-7 23:30:51 | 显示全部楼层
你缺少类似于-march这样的命令行参数,这个用于告诉GCC你编译的目标平台是什么。如果你的目标平台不允许使用这个指令(没有这个指令),gcc会拒绝给你添加指令进去。即使,你是想先使用CPUID判断CPU,再使用CPU支持的最快的指令集。

关键词:target specific option mismatch

这样的报错同样发生在当你给ARM平台编译的时候,却使用了x86的内联汇编等。

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-8-5 18:52 , Processed in 0.103553 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表