首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OSX上带有g++-5的Cython

在OSX上带有g++-5的Cython
EN

Stack Overflow用户
提问于 2015-10-16 03:03:06
回答 1查看 751关注 0票数 0

我正在使用python 3.4,我将包装一些cpp文件,这些文件使用了一些新的c++语言特性以及openmp,但是,我在使它工作时遇到了一些困难。我使用brew安装了gcc5,我可以很好地编译我的cpp文件。当我试图将它们包装到pyx文件中时,我会得到编译器错误。这是我的setup.py

代码语言:javascript
复制
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)

正在运行

代码语言:javascript
复制
python3 setup.py build_ext --inplace

我收到了很多这样的错误:

代码语言:javascript
复制
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很陌生。任何建议都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-17 06:46:28

我设法把它编译好了。这是我的setup.py,以防它帮助任何有同样问题的人:

代码语言:javascript
复制
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,这是很棒的!交叉我的手指。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33161877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档