ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-在OSX 10.14.5上安装clickhouse-cityhash时缺少指令’_mm_crc32_u64′

2019-12-10 20:56:47  阅读:520  来源: 互联网

标签:x86-64 intrinsics clickhouse python c-4


我试图在OSX 10.14.5上使用pip安装clickhouse-cityhash,但它失败,并显示以下(摘要)输出:

src/city.cc:396:5: error: use of undeclared identifier '_mm_crc32_u64'
    CHUNK(1, 1); CHUNK(k0, 0);
    ^
...
fatal error: too many errors emitted, stopping now [-ferror-limit=]
  20 errors generated.
  error: command 'cc' failed with exit status 1

我也尝试通过CC = gcc和CC = g进行编译无济于事.

失败时运行的命令是:

cc -fno-strict-aliasing -fno-common \
   -dynamic -g -Os -pipe -fno-common \
   -fno-strict-aliasing -fwrapv -DENABLE_DTRACE \
   -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes \
   -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall \
   -Wstrict-prototypes -DENABLE_DTRACE -arch i386 \
   -arch x86_64 -pipe -Iinclude \
   -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 \
   -c src/city.cc -o build/temp.macosx-10.14-intel-2.7/src/city.o \
   -O3 -msse4.2 -Wno-unused-value -Wno-unused-function

在试图理解问题的过程中,我查看了source code,我看到了对_mm_crc32_u64的四个调用,这些调用构成了错误日志中提到的CHUNK预处理器指令的一部分:

f = _mm_crc32_u64(f, a);                                    \
g = _mm_crc32_u64(g, b);                                    \
h = _mm_crc32_u64(h, c);                                    \
i = _mm_crc32_u64(i, d);                                    \
j = _mm_crc32_u64(j, e);                                    \

我在Intel Intrinsics Guide中找到了对_mm_crc32_u64的引用,因此我的理解是这是作为C函数的Intel固有指令,它是SSE4.2指令集的一部分.

我发现我的机器不包括SSE4.2指令集,但是当我运行以下命令时:

sysctl -a | grep cpu.features

SSE4.2包含在列表中:

machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C

因此,我应该期望_mm_crc32_u64可用,如果可以的话,此错误的可能原因是什么?

如果没有,我可以做些什么使这些说明可用?

解决方法:

非常感谢@PeterCordes在上述问题评论中的宝贵意见!

在pip安装clickhouse-cityhash期间失败的构建命令包括-arch i386标志.尽管存在此标志,x86 clang的默认行为是生成64位代码.

但是,这似乎不是Apple clang的默认行为.如果生成了32位代码,则_mm_crc32_u32将是可用的最大CRC,这意味着未定义_mm_crc32_u64.

因此,一种解决方案是不使用Apple叮当声.

大多数使用OSX的开发人员都将熟悉brew软件包管理器并进行安装.您可能会发现您已经通过brew安装了gcc版本,作为另一个软件包的依赖项.

检查以下内容:

brew list | grep gcc

如果没有安装,请使用以下命令进行安装:

brew install gcc

该可执行文件应该在您的$PATH中(通常在/usr/local/bin中)以gcc或类似形式可用-我的以gcc-8形式可用.

要使用它,只需定义要与CC envvar一起使用的gcc并运行pip install;例如:

CC=gcc-8 pip install clickhouse-cityhash

希望这可以帮助 :)

标签:x86-64,intrinsics,clickhouse,python,c-4
来源: https://codeday.me/bug/20191210/2104311.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有