“后缀或操作数对'movq'无效”的原因是什么?

2024-06-16 09:47:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图安装一个名为mtspec的python包,它是一些fortran90代码的包装器。(链接:https://pypi.python.org/pypi/mtspec)。但是,这个包相当旧(上次更新是在2010年),我在macosx10.10.5上使用setup.py脚本正确编译代码时遇到了困难。由于distutils中有一些明显的变化,我不得不自己修改一下setup.py脚本。最初,setup.py中的第48行如下所示:

from distutils.unixccompiler import UnixCCompiler, _darwin_compiler_fixup

我换成了

^{pr2}$

没有这个,setup.py只是抛出了异常cannot import name _darwin_compiler_fixup。我对distutils知之甚少,所以请告诉我是不是错了。但在修改之后,它至少尝试编译代码。但是,gfortran现在抛出以下错误:

/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:25:suffix or  operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:27:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:28:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:34:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:79:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:115:suffix or operands invalid for `movq'

我对Fortran不是很有经验,所以我不知道这意味着什么,搜索StackOverflow和Google也没有找到任何解决这个问题的方法。我在另一个站点上看到的一个建议(不记得我在哪里看到的)建议删除-O编译器标志,但这使问题变得更糟;这个错误更频繁地被抛出。在conda虚拟环境中运行setup.py也没有帮助。我现在不知道该怎么办。我以前在craylinux和redhatlinux上安装了这个软件包,只不过简单地注释掉了setup.py中对Darwin的所有引用;只有Mac给我带来了麻烦。在

如果有帮助,setup.py中配置编译器的代码块如下:

from distutils.unixccompiler import UnixCCompiler#, _darwin_compiler_fixup
from _osx_support import compiler_fixup as _darwin_compiler_fixup
# Monkey patch UnixCCompiler for Unix, Linux and darwin
UnixCCompiler.src_extensions.append(".f90")
def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
        compiler_so = self.compiler_so
        if sys.platform == 'darwin':
            compiler_so = _darwin_compiler_fixup(compiler_so, cc_args + extra_postargs)
        if ext == ".f90":
            if sys.platform == 'darwin' or sys.platform == 'linux2':
                compiler_so = ["gfortran"]
                cc_args = ["-O", "-fPIC", "-c", "-ffree-form"]
        try:
            self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
        except DistutilsExecError, msg:
            raise CompileError, msg
UnixCCompiler._compile = _compile
# set library dir for mac and linux
libs=['gfortran']

Tags: orpyforcompilervarsetupsuffixfolders
1条回答
网友
1楼 · 发布于 2024-06-16 09:47:05

因为你提到这只会给Mac带来麻烦。你的机器上是否安装了macports和自制软件?在

我在编译另一个库时遇到了同样的错误,下面的链接为我解决了这个问题:https://github.com/Homebrew/legacy-homebrew/issues/45258

删除macports(例如sudo mv/opt/local~/macport)后,一切正常。在

相关问题 更多 >