Tôi muốn bọc một dự án thử nghiệm có chứa C++ và mã OpenMP với Cython, và xây dựng nó với các rãnh thông qua tệp setup.py
. Nội dung của tập tin của tôi trông như thế này:Làm thế nào để nói cho các distutils sử dụng gcc?
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)
Cờ -fopenmp
được sử dụng với gcc để biên dịch và liên kết chống lại OpenMP. Tuy nhiên, nếu tôi chỉ cần gọi
cls ~/workspace/CythonOpenMP/src $ python3 setup.py build
cờ này không được công nhận, bởi vì trình biên dịch là kêu vang:
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
Tôi đã unsucessfully cố gắng để xác định 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
thế nào có thể Tôi nói với các distutils sử dụng gcc?
'os.environ [" CC "] =" g ++ - 4.7 " os.environ [" CXX " ] = "g ++ - 4.7" 'chỉ làm việc – clstaudt
Điều này không hiệu quả đối với tôi. Vấn đề của tôi là 'setup.py' muốn sử dụng' icc'. Khi tôi đặt 'CC = gcc', nó cố gắng sử dụng' gcc', nhưng nó tiếp tục sử dụng các đối số dòng lệnh thích hợp cho 'icc', trong đó có' -fp-model strict' mà 'gcc' không hiểu, và hủy bỏ. Vì vậy, có vẻ như chỉ cần thiết lập 'CC' không phải là cách đúng để làm điều này. – amaurea
Các máy rẽ không * không * kiểm tra CXX, vì vậy việc cài đặt có thể khiến bạn khó hiểu. Bạn có thể muốn xóa đề xuất thêm "CXX" vì nó gây hiểu lầm. – SethMMorton