Gcc: фатальная ошибка: limit.h: нет такого файла или каталога на macos

Я пытаюсь выполнить установку python-Levenshtein (https://pypi.org/project/python-Левенштейн/) на macos 10.14.5, Python 3.7 и gcc 4.7. Это не удается с:

/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

Возможный дубликат фатальная ошибка: limit.h: нет такого файла или каталога

Leo Leontev 23.05.2019 19:34

Не дубликат, поскольку файлы на самом деле существуют на моем Mac (плюс я использую оба последних MacOS и последний xcode). Отредактировал пост, чтобы было понятно.

pedjjj 24.05.2019 10:58

А что на строке 169 из limits.h?

Vladislav Ivanishin 24.05.2019 11:35

Это идентично тому, что вы разместили в своем ответе.

pedjjj 24.05.2019 14:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
6 129
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

И у вас определенно есть libc от Mac (не знаю, как она называется) вместо Glibc. Возможно, проблема в том, что libc в вашей системе намного новее, чем тот, с которым был настроен ваш gcc (gcc 4.7 сейчас довольно старый), и поэтому он ожидает, что заголовок будет перемещен в другое место в более новой версии.

Это мое предположение. Проверьте свою систему, чтобы узнать. Кроме того, вы можете попробовать более новую сборку gcc, если это возможно.

Спасибо, у меня была та же проблема, и действительно, файл /usr/include/limits.h отсутствовал и вызывал проблему. Могу я спросить вас, как вы узнали, что этот файл был «настоящим»? Это что-то видно из журнала ошибок? Спасибо.

Gaussian97 05.01.2022 10:45

@ Gaussian97 Конечно. Я запустил препроцессор (gcc -E) в простой программе на C, не содержащей ничего, кроме #include <limits.h>, как показано во втором листинге этого ответа, и проверил его вывод. На самом деле это не журнал ошибка; это нормальный вывод препроцессора, а строки, начинающиеся с #, являются маркеры линии.

Vladislav Ivanishin 05.01.2022 23:21
Ответ принят как подходящий

Причиной проблемы здесь была комбинация установки gcc (4.7) через macports и другой, поставляемый с xcode. Использовался первый. Удалив старый gcc, который поставлялся с macports, gcc xcode снова использовался, и, в свою очередь, можно было установить python-Levenshtein (и его C-код скомпилировать).

У меня была та же проблема, только MacPorts не нашел установленный порт на моей машине, и Homebrew тоже ничего не нашел. Тем не менее, когда я набрал which gcc, он указал мне на установку gcc пятилетней давности, которая каким-то образом застряла. Я просто удалил его (или вместо этого вы могли бы переместить его во временный каталог); задача решена.

John 29.05.2020 00:43

В моем случае gcc по умолчанию находится в /usr/local/bin/gcc, и это программная ссылка на /usr/local/bin/gcc-4.9.

Я переустановил gcc с помощью brew install gcc и повторно привязал /usr/local/bin/gcc к новому gcc, который в моем случае /usr/local/bin/gcc-10.

То же самое проделываем и для g++, и тогда проблема решена.

Другие вопросы по теме