Scipy 在 MacOS 上构建失败,因为 LLVM 生产者 != reader

Scipy build fail on MacOS because LLVM producer != reader

我正在尝试 build Scipy from source。但是,链接步骤...

/usr/bin/clang -bundle -undefined dynamic_lookup -L/Users/gwg/miniconda3/envs/scipy-dev/lib -arch x86_64 -L/Users/gwg/miniconda3/envs/scipy-dev/lib -arch x86_64 -L/usr/local/opt/libomp/lib -lomp -I/usr/local/opt/libomp/include -Xpreprocessor -fopenmp -arch x86_64 build/temp.macosx-10.9-x86_64-3.7/scipy/spatial/src/distance_wrap.o -L/Users/gwg/miniconda3/envs/scipy-dev/lib/python3.7/site-packages/numpy/core/lib -Lbuild/temp.macosx-10.9-x86_64-3.7 -lnpymath -o build/lib.macosx-10.9-x86_64-3.7/scipy/spatial/_distance_wrap.cpython-37m-darwin.so

...失败,我收到以下错误:

ld: in /Users/gwg/miniconda3/envs/scipy-dev/lib/python3.7/site-packages/numpy/core/lib/libnpymath.a(npy_math.o), could not parse object file /Users/gwg/miniconda3/envs/scipy-dev/lib/python3.7/site-packages/numpy/core/lib/libnpymath.a(npy_math.o): 'Unknown attribute kind (61) (Producer: 'LLVM10.0.0' Reader: 'LLVM APPLE_1_1000.10.44.4_0')', using libLTO version 'LLVM version 10.0.0, (clang-1000.10.44.4)' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我怀疑这是由于 Producer: 'LLVM10.0.0' Reader: 'LLVM APPLE_1_1000.10.44.4_0' 不匹配造成的。但是我不知道如何调查这个错误。

一些细节:

您似乎使用了不同的 clang(从 /usr/local/opt/libomp/lib 等路径判断)。可能是 conda 提供的那个。为了使用 LTO 执行构建,您需要使用兼容的工具链(例如,使用 Apple-provided 工具链或 conda-provided 工具链构建所有内容)。

我遇到了同样的问题。使用 conda 编译器的建议 here 为我解决了这个问题:

conda create -n scipy-dev
conda activate scipy-dev
conda config --env --add channels conda-forge
conda install numpy cython pybind11 pytest compilers openblas
python setup.py develop