【问题标题】:gcc: fatal error: limits.h: No such file or directory on macosgcc:致命错误:limits.h:macos 上没有这样的文件或目录
【发布时间】:2019-10-10 07:37:10
【问题描述】:

我正在尝试在 macos 10.14.5、Python 3.7 和 gcc 4.7 上安装 python-Levenshtein (https://pypi.org/project/python-Levenshtein/)。这失败了:

/opt/local/lib/gcc47/gcc/x86_64-apple-darwin16/4.7.4/include-fixed/limits.h:169:61: fatal error: limits.h: No such file or directory

完整的日志是:

pip3 install python-levenshtein
Collecting python-levenshtein
  Using cached https://files.pythonhosted.org/packages/42/a9/d1785c85ebf9b7dfacd08938dd028209c34a0ea3b1bcdb895208bd40a67d/python-Levenshtein-0.12.0.tar.gz
Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from python-levenshtein) (39.0.1)
Installing collected packages: python-levenshtein
  Running setup.py install for python-levenshtein ... error
    ERROR: Complete output from command /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/qg/vmj6zq4s7hb2pbkp3b8kstvh0000gn/T/pip-install-lougvxw2/python-levenshtein/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/qg/vmj6zq4s7hb2pbkp3b8kstvh0000gn/T/pip-record-4208lwgo/install-record.txt --single-version-externally-managed --compile:
    ERROR: running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.9-x86_64-3.7
    creating build/lib.macosx-10.9-x86_64-3.7/Levenshtein
    copying Levenshtein/StringMatcher.py -> build/lib.macosx-10.9-x86_64-3.7/Levenshtein
    copying Levenshtein/__init__.py -> build/lib.macosx-10.9-x86_64-3.7/Levenshtein
    running egg_info
    writing python_Levenshtein.egg-info/PKG-INFO
    writing dependency_links to python_Levenshtein.egg-info/dependency_links.txt
    writing entry points to python_Levenshtein.egg-info/entry_points.txt
    writing namespace_packages to python_Levenshtein.egg-info/namespace_packages.txt
    writing requirements to python_Levenshtein.egg-info/requires.txt
    writing top-level names to python_Levenshtein.egg-info/top_level.txt
    reading manifest file 'python_Levenshtein.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no previously-included files matching '*pyc' found anywhere in distribution
    warning: no previously-included files matching '*so' found anywhere in distribution
    warning: no previously-included files matching '.project' found anywhere in distribution
    warning: no previously-included files matching '.pydevproject' found anywhere in distribution
    writing manifest file 'python_Levenshtein.egg-info/SOURCES.txt'
    copying Levenshtein/_levenshtein.c -> build/lib.macosx-10.9-x86_64-3.7/Levenshtein
    copying Levenshtein/_levenshtein.h -> build/lib.macosx-10.9-x86_64-3.7/Levenshtein
    running build_ext
    building 'Levenshtein._levenshtein' extension
    creating build/temp.macosx-10.9-x86_64-3.7
    creating build/temp.macosx-10.9-x86_64-3.7/Levenshtein
    gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c Levenshtein/_levenshtein.c -o build/temp.macosx-10.9-x86_64-3.7/Levenshtein/_levenshtein.o
    In file included from /opt/local/lib/gcc47/gcc/x86_64-apple-darwin16/4.7.4/include-fixed/syslimits.h:7:0,
                     from /opt/local/lib/gcc47/gcc/x86_64-apple-darwin16/4.7.4/include-fixed/limits.h:34,
                     from /Library/Frameworks/Python.framework/Versions/3.7/include/python3.7m/Python.h:11,
                     from Levenshtein/_levenshtein.c:99:
    /opt/local/lib/gcc47/gcc/x86_64-apple-darwin16/4.7.4/include-fixed/limits.h:169:61: fatal error: limits.h: No such file or directory
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command "/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/qg/vmj6zq4s7hb2pbkp3b8kstvh0000gn/T/pip-install-lougvxw2/python-levenshtein/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/qg/vmj6zq4s7hb2pbkp3b8kstvh0000gn/T/pip-record-4208lwgo/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/qg/vmj6zq4s7hb2pbkp3b8kstvh0000gn/T/pip-install-lougvxw2/python-levenshtein/
felix@fxa-2:~$

有趣的是,该文件实际上确实存在于我的 Mac 上,即:

felix@fxa-2:~$ ls /opt/local/lib/gcc47/gcc/x86_64-apple-darwin16/4.7.4/include-fixed
README       limits.h     math.h       stdint.h     syslimits.h

【问题讨论】:

  • 不是重复的,因为这些文件实际上存在于我的 mac 上(而且我在两个最新的 macos 上并拥有最新的 xcode)。编辑帖子以明确这一点。
  • limits.h 的第 169 行是什么?
  • 这与您在答案中发布的内容相同。

标签: python-3.x macos gcc pip gcc4.7


【解决方案1】:

就我而言,默认的gcc 在/usr/local/bin/gcc 中,它是指向/usr/local/bin/gcc-4.9 的软链接。

我用brew install gcc 重新安装了gcc,并将/usr/local/bin/gcc 重新链接到新的gcc,在我的例子中是/usr/local/bin/gcc-10。

对g++也做了同样的事情,然后问题就解决了。

【讨论】:

    【解决方案2】:

    这里问题的原因是通过 macports 安装了 gcc (4.7) 和 xcode 附带的另一个。使用了第一个。通过卸载 macports 附带的旧 gcc,再次使用 xcode 的 gcc,然后可以安装 python-Levenshtein(并编译其 C 代码)。

    【讨论】:

    • 我遇到了同样的问题,只有 MacPorts 没有在我的机器上找到已安装的端口,而 Homebrew 也没有找到任何东西。然而,当我输入which gcc 时,它指出我安装了一个已有五年历史的 gcc,不知何故卡住了。我刚刚删除了它(或者您可以将其移至临时目录);问题解决了。
    【解决方案3】:

    在我的机器上(不是 Mac,但应该翻译结果),…include-fixed/limits.h 包含以下内容

    #ifdef _GCC_NEXT_LIMITS_H
    #include_next <limits.h>                /* recurse down to the real one */
    #endif
    

    就我而言,“真正的”似乎是/usr/include/limits.h:

    $ <<< '#include <limits.h>'  gcc -E -xc - |grep limits
    # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 1 3 4
    # 34 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 3 4
    # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/syslimits.h" 1 3 4
    # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 1 3 4
    # 194 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 3 4
    # 1 "/usr/include/limits.h" 1 3 4
    # 26 "/usr/include/limits.h" 3 4
    # 27 "/usr/include/limits.h" 2 3 4
    # 183 "/usr/include/limits.h" 3 4
    # 1 "/usr/include/linux/limits.h" 1 3 4
    # 184 "/usr/include/limits.h" 2 3 4
    # 188 "/usr/include/limits.h" 2 3 4
    # 195 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 2 3 4
    # 8 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/syslimits.h" 2 3 4
    # 35 "/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/limits.h" 2 3 4
    

    我的包管理器这么说 /usr/include/limits.h is owned by glibc 2.29-1.

    而且你肯定有 Mac 的 libc(不知道它叫什么)代替了 Glibc。也许问题是您系统上的 libc 比您的 gcc 配置的 libc 新得多(gcc 4.7 现在已经很老了),因此它希望在新版本中将标头移动到另一个位置。

    这是我的猜测。检查您的系统以找出答案。此外,如果可以的话,您可以尝试更新的 gcc 版本。

    【讨论】:

    • 谢谢,我遇到了同样的问题,确实文件 /usr/include/limits.h 丢失并导致了问题。请问你怎么知道这个文件是“真实的”?您可以从错误日志中看到吗?谢谢。
    • @Gaussian97 当然。我在一个简单的 C 程序上运行预处理器 (gcc -E),只包含 #include &lt;limits.h&gt;,如该答案的第二个列表所示,并检查了它的输出。它实际上不是 error 日志;这是预处理器的正常输出,以# 开头的行是linemarkers。
    猜你喜欢
    • 2017-09-08
    • 2013-11-04
    • 1970-01-01
    • 2015-08-23
    • 2021-10-31
    • 2019-09-15
    • 2014-05-25
    • 2017-05-09
    • 2021-05-15
    相关资源
    最近更新 更多