编程语言
首页 > 编程语言> > python – 错误:对于`vbroadcastss’,后缀或操作数无效

python – 错误:对于`vbroadcastss’,后缀或操作数无效

作者:互联网

我想在CentOS 6.5服务器上通过pip install annoy安装annoy,但是出现了以下错误.任何的想法?我在here发现了VBROADCASTSS,但仍然不知道如何解决这些错误.

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/xxx/.pyenv/versions/2.7.10/include/python2.7 -c src/annoymodule.cc -o build/temp.linux-x86_64-2.7/src/annoymodule.o -O3 -march=native -ffast-math
cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
In file included from /home/xxx/.pyenv/versions/2.7.10/include/python2.7/Python.h:8:0,
                 from src/annoymodule.cc:16:
/home/xxx/.pyenv/versions/2.7.10/include/python2.7/pyconfig.h:1188:0: warning: "_POSIX_C_SOURCE" redefined
 #define _POSIX_C_SOURCE 200112L
 ^
In file included from /usr/include/stdio.h:28:0,
                 from src/annoylib.h:18,
                 from src/annoymodule.cc:15:
/usr/include/features.h:162:0: note: this is the location of the previous definition
 # define _POSIX_C_SOURCE 200809L
 ^
In file included from /home/xxx/.pyenv/versions/2.7.10/include/python2.7/Python.h:8:0,
                 from src/annoymodule.cc:16:
/home/xxx/.pyenv/versions/2.7.10/include/python2.7/pyconfig.h:1210:0: warning: "_XOPEN_SOURCE" redefined
 #define _XOPEN_SOURCE 600
 ^
In file included from /usr/include/stdio.h:28:0,
                 from src/annoylib.h:18,
                 from src/annoymodule.cc:15:
/usr/include/features.h:164:0: note: this is the location of the previous definition
 # define _XOPEN_SOURCE 700
 ^

/tmp/ccfNu0mQ.s: Assembler messages:
/tmp/ccfNu0mQ.s:21160: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:21163: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:21532: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24347: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24350: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24718: Error: suffix or operands invalid for `vbroadcastss'
error: command 'gcc' failed with exit status 1

解决方法:

我使用gcc -march = native -Q –help = target来比较几台Linux机器上的gcc设置.
我发现主要区别在于故障机器上的-march线是haswell,而其他线路是
像核心……这是来自其他服务器的相应输出:

CentOS 6.5版(最终版) – -march = corei7-avx

CentOS Linux 7(核心版) – -march = core-avx-i

Debian GNU / Linux 7(wheezy) – -march = core-avx2

我猜错误来自gcc使用的不同指令集.
在annoy的setup.py中,-march = native in line extra_compile_args = [‘ – O3′,’ – march = native’,’ – fast-math’]表示gcc将尝试检测处理器并自动为其设置适当的标志.
所以我在setup.py中将此标志更改为-march = corei7-avx,错误消失了.

如果您有兴趣,请参阅here中的-march了解详情.

更新

在与服务器管理员确认后,此错误是由于CentOS加载程序软件比服务器中的新Haswell CPU更旧.安装最新版本的binutils包也可以解决问题.

标签:python,compiler-errors,avx,avx2
来源: https://codeday.me/bug/20190609/1202802.html