我正在开发一个使用 cython 和 c 来加速时间敏感操作的 python 项目。在我们的一些 cython 例程中,如果空闲内核可用,我们会使用 openmp 来进一步加快操作。
这会导致 OS X 上出现一些烦人的情况,因为最新 OS 版本(10.7 和 10.8 上的 llvm/clang)的默认编译器不支持 openmp。我们的权宜之计是告诉人们在构建时将 gcc 设置为他们的编译器。我们真的很想以编程方式执行此操作,因为 clang 可以毫无问题地构建其他所有内容。
现在,编译将失败并出现以下错误:
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: Command "cc -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib build/temp.macosx-10.8-x86_64-2.7/yt/utilities/lib/geometry_utils.o -lm -o yt/utilities/lib/geometry_utils.so -fopenmp" failed with exit status 1
我们设置脚本的相关部分如下所示:
config.add_extension("geometry_utils",
["yt/utilities/lib/geometry_utils.pyx"],
extra_compile_args=['-fopenmp'],
extra_link_args=['-fopenmp'],
libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
完整的 setup.py 文件在这里。
有没有办法从设置脚本中以编程方式测试对 openmp 的支持?