0

私は使用してpython 3.4おり、openmp とともに新しい C++ 言語機能のいくつかを使用するいくつかの cpp ファイルをラップする予定ですが、それを機能させるのに問題があります。brew を使用して gcc5 をインストールしましたが、cpp ファイルを問題なくコンパイルできます。それらを pyx ファイルにラップしようとすると、コンパイラ エラーが発生します。これが私のものsetup.pyです:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import os

os.environ["CC"] = "/usr/local/Cellar/gcc/5.2.0/bin/g++-5"
os.environ["CXX"] = "/usr/local/Cellar/gcc/5.2.0/bin/g++-5"

modules = [Extension("constellation",
                     ["constellation.pyx"],
                     language="c++",
                     extra_compile_args=["-std=c++1y"])]

for e in modules:
    e.cython_directives = {"embedsignature": True}

setup(name="constellation",
      cmdclass={"build_ext": build_ext},
      ext_modules=modules)

ランニング

python3 setup.py build_ext --inplace

これらのエラーが大量に発生します。

cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
/var/folders/33/vsltc7m51l77bd5qlw3bwxzm0000gn/T//ccuePcPk.s:39:bad register name `%rdi)'
/var/folders/33/vsltc7m51l77bd5qlw3bwxzm0000gn/T//ccuePcPk.s:40:bad register name `%rdi)'
/var/folders/33/vsltc7m51l77bd5qlw3bwxzm0000gn/T//ccuePcPk.s:41:bad register name `%rdi)'
/var/folders/33/vsltc7m51l77bd5qlw3bwxzm0000gn/T//ccuePcPk.s:101:bad register name `%rbx'
...
/var/folders/33/vsltc7m51l77bd5qlw3bwxzm0000gn/T//cca3Gn0U.s:15821:Rest of line ignored. 1st junk character valued 64 (@).
error: command '/usr/local/Cellar/gcc/5.2.0/bin/g++-5' failed with exit status 1

コンパイラを通常に変更すると、正常g++に動作し、コンパイルされますApple LLVM version 6.1.0 (clang-602.0.53)

何が起こっているか知っている人はいますか?静的ライブラリまたは動的ライブラリを構築し、代わりにそれをラップする方がよいでしょうか? わからない場合は、私は Cython の初心者です。どんなアドバイスでも大歓迎です!

4

1 に答える 1

1

なんとかコンパイルできました。setup.py同じ問題を抱えている人に役立つ場合に備えて、これが私のものです:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import os

os.environ["CC"]= "/usr/local/Cellar/gcc/5.2.0/bin/g++-5"
os.environ["CXX"]= "/usr/local/Cellar/gcc/5.2.0/bin/g++-5"
os.environ["MACOSX_DEPLOYMENT_TARGET"]= "10.10"
os.environ["ARCHFLAGS"]= "-arch x86_64"
os.environ["CFLAGS"]= (
    '-I/Users/Thomas/Documents/workspace/Quantum/Symengine '
    '-I/Users/Thomas/Documents/workspace/Quantum/Symengine/symengine '
    '-I/Users/Thomas/Documents/workspace/Quantum/Symengine/symengine/teuchos '
    '-I/Users/Thomas/Documents/workspace/Quantum/SymCell '
    '-I/Users/Thomas/googletest/googletest/include '
    '-I/Users/Thomas/Documents/workspace/Quantum/QuantumCell '
    '\"-I/Users/Thomas/Documents/workspace/Quantum/Quantum CPP\" '
)

extensions = [
    Extension("constellation",
        sources=["constellation.pyx"],
        language="c++",
        extra_compile_args=["-std=c++1y","-fopenmp"],
        extra_link_args=["-fopenmp"])]

setup(
    name = "constellation",
    ext_modules = cythonize(extensions)
)

私の cython が正しくセットアップされていないようで、いくつかの環境変数を手動で設定する必要がありました。特に、コンパイラは-arch i386何らかの理由で追加していました。を明示的に設定するARCHFLAGSと、それが取り除かれます。また、C++ コードでも openmp を使用できるようになりそうです。これは素晴らしいことです。指を交差...

于 2015-10-17T06:46:28.263 に答える