Я пытаюсь установить clickhouse-cityhash
с pip
в OSX 10.14.5, но он не работает со следующим (сокращенным) выводом:
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
В попытке понять проблему я посмотрел на исходный код и я вижу четыре вызова _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); \
Я нашел ссылку на _mm_crc32_u64
в Intel Intrinsics Guide , поэтому я понимаю, что это Intel Intrinsic Instruction в виде функции C, которая является частью набора инструкций SSE4.2.
Я подумал, что моя машина не включаетнабор инструкций SSE4.2, но когда я запускаю следующую команду:
sysctl -a | grep cpu.features
SSE4.2 включается в список:
machdep.cpu.features: FPU VMEDE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE, SSE2, СС НТТ ТМ РВЕ SSE3 PCLMULQDQ DTES64 ПН DSCPL VMX SMX EST ТМ2 SSSE3 ФМА CX16 ТПВ PDCM SSE4.1 SSE4.2 * * 1 034 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C * +1035 *
Следовательно, я должен ожидать, что _mm_crc32_u64
будет доступен, и если да, какова вероятная причина этой ошибки?
Если нет, могу ли я что-нибудь сделать для выполнения этих инструкцийдоступны