Linux gcc нет такого файла или каталога

Фатальная ошибка: linux/compiler-gcc7.h: нет такого файла или каталога

Я пытаюсь установить инструмент Atheros CSI (см. Инструкции по установке здесь), использующий Ubuntu 18.04.2 LTS на ноутбуке Dell Inspiron 5570 с беспроводным адаптером QCA9377.

Я могу сделать все успешно, что указано в разделе «Подготовка» «Компилировать ядро» в инструкциях по установке. (Есть некоторые вещи, не указанные в инструкциях, которые я смог выяснить, например, установка make а также gcc .) Однако я запутался в make menuconfig шаг вперед Когда я печатаю make menuconfig в папке Atheros-CSI-Tool я сразу нажимаю «Сохранить», сохраняя файл с именем .config , затем «Выход» из меню.

Когда я печатаю make -j16 (У меня 8 процессорных ядер), это вывод:

Когда я тогда наберу make modules это вывод:

Я попытался исправить эти ошибки, с которыми столкнулся, установив старую версию Ubuntu (14.04) из архивов, но Wi-Fi не работал на моем ноутбуке под этой ОС (что важно, так как я собираю данные о соединениях Wi-Fi) с инструментом, который я пытаюсь установить). Я также установил старое ядро ​​Linux (4.1.10) из онлайн-архива, но столкнулся с такими же ошибками, как показано выше.

1 ответ

Вот две проблемы:

Ядро не поддерживает режим PIC для компиляции, подробности можно проследить на этом посту. Как заметил @Joy, в настоящее время в установленном gcc5+ включен PIE по умолчанию, нам нужно добавить -fno-pie в опцию gcc.

Здесь я следую за этим исправлением, добавьте следующие строки, начиная с L774 из Makefile под мерзавцем репо вы клонировали.

include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h Достоевский заявляет что под папкой include/linux из репозитория git, который вы клонировали, такого файла с именем compiler-gcc7.h , В настоящее время в этой папке существует только до compiler-gcc5.h , Поэтому прямой подход заключается в установке и временном выборе gcc-5 в качестве компилятора по умолчанию. Следующий:

Инструкция по установке указана для установки libnl-dev через

все же libnl-dev кажется больше не существует на 18.04. Рассмотреть возможность использования

вместо этого, если у вас были проблемы.

Наконец, вы могли бы вернуться к gcc-7 после установки через

Источник

Отладка ошибки » gcc: ошибка: x86 64-linux-gnu-gcc: нет такого файла или каталога»

Я пытаюсь построить: https://github.com/kanzure/nanoengineer

но похоже, что это ошибки на:

x86_64-linux-gnu-gcc наверняка существует в / usr / bin (это символическая ссылка), и цель определенно существует. Мне кажется, что Makefile был сгенерирован неправильно, возможно, есть флаг, который должен быть передан перед указанием x86_64-linux-gnu-gcc? Я также не уверен, что указывает x86_64-linux-gnu-gcc предполагается выполнять.

наконец, этот makefile был создан configure, поэтому, как только мы сузим причину ошибки, мне придется выяснить, какие файлы нужно изменить, чтобы исправить это. (Я сам парень типа CMake, но, конечно, я не выбирал систему сборки для этого проекта.) Моя ОС-Debian.

Я также пытался построить эту ветку: https://github.com/kanzure/nanoengineer/branches/kirka-updates

Если вы можете попробовать это постройте на вашей системе, я был бы очень признателен! Спасибо!

5 ответов

после изрядного количества работы я смог заставить его строить на Ubuntu 12.04 x86 и Debian 7.4 x86_64. Я написал руководство ниже. Можете ли вы попробовать следовать за ним, чтобы увидеть, решает ли он проблему?

если не Пожалуйста, дайте мне знать, где вы застряли.

Установить Общие Зависимости

Установить NumArray 1.5.2

Установите Цифровой 23.8

установить HDF5 1.6.5

Установить Nanoengineer

устранение неисправностей

Читайте также:  Linux jack audio server

в Debian Jessie вы получите сообщение об ошибке, о котором упоминалось в cant pants. Кажется, в сценариях automake есть проблема. x86_64-linux-gnu-gcc вставить в CFLAGS и gcc будет интерпретировать это как имя одного из исходных файлов. В качестве обходного пути, давайте создайте пустой файл с таким именем. Пусто, чтобы он не изменил программу и само это имя, чтобы компилятор взял его. Из клонированного каталога nanoengineer запустите эту команду, чтобы сделать gcc счастливым (это хак да, но он работает) .

если вы получаете сообщение об ошибке при попытке скомпилировать HDF5 по строкам: «ошибка: вызовите» __open_missing_mode», объявленный с атрибутом error: open with O_CREAT во втором аргументе требуется 3 аргумента», затем измените файл perform/zip_perf.c, строки 548 выглядеть следующий и повторно запустите сделает.

если появляется сообщение об ошибке Numeric / arrayobject.h не найден при создании Наноинженера, попробуйте запустить

если появляется сообщение об ошибке, подобное «TRACE_PREFIX undeclared», измените файл sim/src/simhelp.c строк 38 до 41, чтобы выглядеть так и повторно запустить make:

если при попытке запуска появляется сообщение об ошибке NanoEngineer-1, который упоминает что-то похожее на «не удается импортировать имя GL_ARRAY_BUFFER_ARB», измените строки в следующих файлах

это выглядит так:

я также нашел дополнительный текстовый файл для устранения неполадок, который был удален, но вы можете найти его здесь

Источник

gcc / g++: «нет такого файла или каталога»

g++ дает мне ошибки типа:

это то же самое при компиляции C-программ с gcc .

обратите внимание: этот вопрос задавался много раз раньше, но каждый раз он был специфичен для ситуации Аскеров. Цель этого вопроса —есть вопрос, что другие могут быть закрыты как дубликаты, раз и навсегда; a часто задаваемые вопросы.

1 ответов

свой компилятор просто попытался скомпилировать файл с именем foo.cc . При попадании номер строки line компилятор находит:

компилятор затем пытается найти этот файл. Для этого он использует набор каталогов для просмотра, но в этом наборе нет файла bar . Для объяснения разницы между версиями оператора include посмотрите здесь.

как сообщить компилятору, где найти его

g++ имеет параметр -I . Он позволяет добавлять пути поиска include в командную строку. Представьте, что ваш файл bar в папке с именем frobnicate , относительно foo.cc (предположим, вы компилируете из каталога, где foo.cc местонахождение):

вы можете добавить больше include-путей; каждый вы даете относительно текущего каталога. Компилятор Microsoft имеет коррелирующий параметр /I это работает таким же образом, или в Visual Studio, папки могут быть установлены на страницах свойств проекта, в разделе свойства конфигурации — >C / C++ — >общие — >дополнительные каталоги Include.

теперь представьте, что у вас есть несколько версий bar в разных папках, дано:

приоритет #include «bar» — самый левый:

как вы видите, когда компилятор начал искать через A/ , B/ и C/ , он остановился при первом или крайнем левом ударе.

это верно для обеих форм, include <> и incude «» .

разницу между #include и #include «bar»

обычно #include заставляет его сначала заглянуть в системные папки, #include «xxx» заставляет его сначала заглянуть в текущие или пользовательские папки.

представьте, что у вас есть следующие файлы в папке проекта:

этого, ваш компилятор будет #include файл list в папке проекта, потому что он в настоящее время составляет main.cc и вот этот файл list в текущей папке.

а то g++ main.cc , ваш компилятор сначала посмотрит в системные папки, и потому что
является стандартным заголовком, он будет #include файл с именем list что происходит с вашим c++ платформе стандартная библиотека.

это все немного упрощенно, но должно дать вам основную идею.

подробнее о <> / «» -приоритеты и -I

по словам gcc-документация основная задача include <> is, на «нормальной системе Unix», следующим образом:

для программ на C++ он также будет сначала выглядеть в /usr/include/c++/version. В приведенном выше, target является каноническим именем системы GCC был настроен для компиляции кода; [. ].

в документации также говорится:

в этот список можно добавить параметр командной строки-Idir. Все каталоги, названные-I, ищутся в порядке слева направо,перед каталогами по умолчанию. Единственное исключение — когда dir уже выполняется поиск по умолчанию. В этом случае параметр игнорируется, а порядок поиска системных каталогов остается неизменным.

продолжить #include
/ #include»list» пример (тот же код):

Читайте также:  Roll with the windows down

и -I. приоритет папке . над системой включает и мы получаем ошибку компилятора.

Источник

gcc / g++: «нет такого файла или каталога»

g++ дает мне ошибки типа:

то же самое при компиляции C-программ с gcc .

обратите внимание: этот вопрос задавался много раз раньше, но каждый раз он был специфичен для ситуации askers. Цель этого вопроса —есть вопрос, что другие могут быть закрыты как дубликаты, раз и навсегда; a часто задаваемые вопросы.

1 ответ:

ваш компилятор только что попытался скомпилировать файл с именем foo.cc . При попадании номер строки line компилятор находит:

компилятор затем пытается найти этот файл. Для этого он использует набор каталогов для просмотра, но в этом наборе нет файла bar . Для объяснения разницы между версиями инструкции include смотрите здесь.

как сказать компилятору, где чтобы найти его

g++ имеет параметр -I . Он позволяет добавлять пути поиска include в командную строку. Представьте, что ваш файл bar в папке с именем frobnicate , относительно foo.cc (предполагаю, что вы компилируете из каталога, где foo.cc местонахождение):

вы можете добавить больше include-пути; каждый вы даете относительно текущего каталога. Компилятор Microsoft имеет параметр корреляции /I это работает таким же образом, или в Visual Studio, папки могут быть установлены на страницах свойств проекта, в разделе свойства конфигурации — >C / C++->общие->дополнительные каталоги включения.

теперь представьте, что у вас есть несколько версий bar в разных папках, дано:

приоритет #include «bar» — самый левый:

как видите, когда компилятор начал просматривать A/ , B/ и C/ , он остановился при первом или крайнем левом ударе.

это верно для обеих форм, include <> и incude «» .

разницу между #include и #include «bar»

обычно #include заставляет его сначала заглянуть в системные папки, #include «xxx» заставляет его сначала заглянуть в текущие или пользовательские папки.

представьте, что у вас есть следующие файлы в папке проекта:

этого, ваш компилятор будет #include файл list в папке проекта, потому что он в настоящее время составляет main.cc и вот этот файл list в текущей папке.

а то g++ main.cc , ваш компилятор сначала посмотрит в системные папки, и потому что
— это стандартный заголовок, он будет #include файл с именем list это поставляется с вашей платформой C++ в составе стандартная библиотека.

это все немного упрощенно, но должно дать вам основную идею.

подробнее о <> / «» -приоритеты и -I

по словам gcc-documentation основная задача include <> находится в «нормальной системе Unix» следующим образом:

для программ на C++ он также будет выглядеть в /usr/include/c++/version, first. В приведенном выше target-это каноническое имя системного GCC был настроен для компиляции кода; [. ].

в документации также говорится:

вы можете добавить в этот список с параметром командной строки-Idir. Все каталоги с именем-I ищутся в порядке слева направо,перед каталогами по умолчанию. Единственное исключение — когда dir уже ищется по умолчанию. В этом случае параметр игнорируется, а порядок поиска для системных каталогов остается неизменным.

продолжить #include
/ #include»list» пример (тот же код):

и -I. приоритет папке . над системой включает и мы получаем ошибку компилятора.

Источник

Ошибка gcc: gcc: ошибка при попытке выполнить ‘cc1’: execvp: нет такого файла или каталога

Я успешно использую gcc на Linux Mint 12. Теперь я получаю сообщение об ошибке. Я недавно делал несколько сборок .so и не так давно установил Clang, но успешно скомпилировал после обоих этих событий, поэтому не уверен, что изменилось. Я использовал диспетчер программного обеспечения с графическим интерфейсом, чтобы удалить, а затем снова установить gcc, но результаты те же:

Объяснение

В сообщении об ошибке говорилось, что зависимость времени сборки (в данном случае она есть cc1 ) не найдена, поэтому все, что нам нужно — установить соответствующий пакет в систему (используя диспетчер пакетов // из источников // другим способом)

cc1 — это внутренняя команда, которая берет предварительно обработанные файлы на языке C и преобразует их в сборку. Это фактическая часть, которая компилирует C. Для C ++ есть cc1plus и другие внутренние команды для разных языков.

Решение для: Ubuntu / Linux Mint

Решение для: среды Docker-alpine

Если вы находитесь в среде docker-alpine, установите пакет build-base , добавив его в свой Dockerfile :

Читайте также:  Музыкальный виджет для рабочего стола windows 10

Лучшее название пакета предоставил Пабло Кастеллано . Подробнее здесь .

Если вам нужно больше пакетов для сборки, рассмотрите возможность добавления пакета alpine-sdk :

Решение для: CentOS / Fedora

Этот ответ содержит инструкции для CentOS и Fedora Linux.

Решение для: Amazon Linux

Вы также можете попробовать установить пропущенные зависимости с помощью этого ( хотя, как говорят, это не решает проблему ):

На CentOS или Fedora

В debian / ubuntu я исправил эту проблему, переустановив build-essential :

Это связано с тем, что gcc вызывает множество других исполняемых файлов для завершения обработки ввода, а их cc1 нет во включенном пути.

По типу оболочки whereis cc1 . Если он cc1 будет найден, лучше создать мягкую ссылку в каталоге gcc ; в противном случае cc1 не устанавливается, и вам необходимо установить gcc-c ++ с помощью диспетчера пакетов.

Amazon Linux: устранение проблемы с GCC

Поскольку это первый результат в Google, я просто хотел задокументировать свой опыт работы с Amazon Linux. Установка gcc-c++.noarch устранила проблему:

sudo yum install gcc-c++.noarch

Некоторые люди также сообщили об этой альтернативе как о решении:

sudo yum install gcc72-c++

Сегодня я столкнулся с аналогичной проблемой — коллега не мог собрать свое программное обеспечение, но я мог его собрать. Когда побежал, gcc найти не смог cc1 .

Его путь к исполняемому файлу выглядел разумным, но тот факт, что я не мог легко воспроизвести сбой, предполагал, что причина в его среде.

В конце концов мы нашли GCC_EXEC_PREFIX в его среде определение, которое было виновником и вводило gcc в заблуждение при поиске cc1 . Это было частью его сценариев запуска оболочки и предназначалось для обхода ограничения в системе SPARC / Solaris, которая больше не используется. Проблема была решена, если не задавать эту переменную среды.

Я исправил эту проблему, явно установив g ++:

Проблема возникла в Ubuntu 12.04 при установке pandas. (Спасибо, perilbrain.)

yum install gcc-c++ сделал исправление.

Убедитесь, что ваш GCC_EXEC_PREFIX(env) не экспортируется, а ваш PATH экспортируется в нужную цепочку инструментов.

Я испытал это вскоре после компиляции и установки нового блестящего GCC — версии 8.1 — на RHEL 7. В конце концов, это оказалось проблемой с разрешениями; моя корневая маска была виновата. В конце концов я обнаружил, что cc1 прячусь в /usr/local/libexec :

Однако разрешения для ведущих туда каталогов не позволяли моей стандартной учетной записи пользователя:

Быстрая рекурсия chmod для добавления разрешений на чтение / выполнение для всего мира исправила это сразу:

А теперь gcc могу найти, cc1 когда прошу компилировать что-нибудь!

Это также может быть отображаемое сообщение об ошибке, если вы пытаетесь запустить 32-разрядные двоичные файлы gcc в 64-разрядной ОС и при этом отсутствует 32-разрядная glibc. Согласно этому файлу readme : «Для 64-битной системы для запуска инструментов требуются 32-битные libc и libncurses.». В этом случае нет проблем с путем, и cc1 действительно найден, но сообщается как отсутствующий как 32-битный glibc отсутствует.

Что мне помогло, так это использовать llvm-gcc вместо этого:

Просто чтобы задокументировать мою проблему с этой проблемой, хотя это просто кажется конкретным примером других ответов; как относительный новичок, я чувствую, что это может помочь другим.

Я добавил / usr / bin в начало PATH для одного сеанса, PATH=’/usr/path/:$PATH’ и все начало работать нормально.

Я использовал gedit для постоянного обновления PATH, убедившись, что он не сломает мои обычные инструменты.

У меня на Ubuntu 14.04LTS установлено несколько наборов инструментов, и я использую только пару на регулярной основе. Когда я попытался использовать gcc из командной строки, у меня возникла проблема, описанная OP. ‘/ usr / bin’ находится в PATH, но находится за другими местоположениями инструментальной цепочки. Оказывается, cc1 для этих других наборов инструментов несовместим с gcc.

Источник

Оцените статью