我想用Cython包装一个包含C ++和OpenMP代码的测试项目,并通过setup.py文件与distutils一起构建它。我文件的内容如下所示:
setup.py
from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize from Cython.Distutils import build_ext modules = [Extension("Interface", ["Interface.pyx", "Parallel.cpp"], language = "c++", extra_compile_args=["-fopenmp"], extra_link_args=["-fopenmp"])] for e in modules: e.cython_directives = {"embedsignature" : True} setup(name="Interface", cmdclass={"build_ext": build_ext}, ext_modules=modules)
该-fopenmp标志与gcc一起用于针对OpenMP进行编译和链接。但是,如果我只是调用
-fopenmp
cls ~/workspace/CythonOpenMP/src $ python3 setup.py build
由于编译器是clang,因此无法识别此标志:
running build running build_ext skipping 'Interface.cpp' Cython extension (up-to-date) building 'Interface' extension cc -Wno-unused-result -fno-common -dynamic -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -c Interface.cpp -o build/temp.macosx-10.8-x86_64-3.3/Interface.o -fopenmp clang: warning: argument unused during compilation: '-fopenmp' cc -Wno-unused-result -fno-common -dynamic -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -c Parallel.cpp -o build/temp.macosx-10.8-x86_64-3.3/Parallel.o -fopenmp clang: warning: argument unused during compilation: '-fopenmp' Parallel.cpp:24:10: warning: unknown pragma ignored [-Wunknown-pragmas] #pragma omp parallel for ^ 1 warning generated. c++ -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib build/temp.macosx-10.8-x86_64-3.3/Interface.o build/temp.macosx-10.8-x86_64-3.3/Parallel.o -o build/lib.macosx-10.8-x86_64-3.3/Interface.so -fopenmp ld: library not found for -lgomp clang: error: linker command failed with exit code 1 (use -v to see invocation) error: command 'c++' failed with exit status 1
我尝试指定gcc失败:
cls ~/workspace/CythonOpenMP/src $ python3 setup.py build --compiler=g++-4.7 running build running build_ext error: don't know how to compile C/C++ code on platform 'posix' with 'g++-4.7' compiler
如何告诉distutils使用gcc?
尝试使用os.environ从setup.py内部设置“ CC”环境变量。