Рейтинг:1

/usr/include/x86_64-linux-gnu/sys содержит только битые символические ссылки

флаг gb

Моя операционная система — Ubuntu 20.04.

Первоначальная проблема: я пытался запустить make и получил такие ошибки, как:

/usr/include/sys/cdefs.h:453:10: фатальная ошибка: bits/long-double.h: нет такого файла или каталога
  453 | #include <bits/long-double.h>
      | ^~~~~~~~~~~~~~~~~~~~~

Сначала я попытался решить эту проблему, выполнив поиск эквивалентного заголовка (обычно в /usr/include/x86_64-linux-gnu) и добавление символической ссылки. Первоначальный реф обычно был от /usr/include/С++/9/<что угодно>. После дюжины или около того таких заголовков в /usr/include/sys и каждый из них, казалось, имел эквивалент в /usr/include/x86_64-linux-gnu/sys. Затем я попытался создать символическую ссылку формы

/usr/include/sys --> /usr/include/x86_64-linux-gnu/sys

Я не знаю, было ли это причиной моих последующих проблем, но, вероятно, это была не самая блестящая моя идея. Мне казалось, что я хожу по кругу, потому что некоторые из предыдущих ошибок заголовка вернулись. Я решил переустановить libc6 и libc6:i386. После этого все «заголовки» в /usr/include/x86_64-linux-gnu/sys были символическими ссылками, помеченными как неработающие. Когда я проверил свойства некоторых из них, стало ясно, почему... все они были ссылками на самих себя!!

Может ли кто-нибудь дать мне подсказку, как исправить ущерб и получить конфигурацию, которая будет успешно запускать Makefile?

Рейтинг:3
флаг zw

Вы не должны трогать структуру файлов вручную в местах, где файлы контролируются APT. Удалите и отмените все подобные ручные вмешательства. Не делай этого в следующий раз!

Вы должны (пере)установить соответствующие пакет разработки, который владеет бит/long-double.h файл к

sudo apt-get install --переустановить libc6-dev

Если у вас есть серьезные повреждения, переустановите все пакеты, которые обеспечивают включатьs с помощью следующих команд:

sudo apt-get install --reinstall $(dpkg -l | grep ^ii | grep "\-dev" | awk '{print $2}')
sudo apt-get install --reinstall $(dpkg -S /usr/include/ | sed 's/,//g' | sed 's/: \/usr\/include//g')
флаг gb
Переустановка libc6-dev действительно исправила отсутствующие заголовки в `/usr/include/x86_64-linux-gnu/sys`, но я по-прежнему получаю те же ошибки make, что и раньше, потому что нет каталога с именем `usr/include/sys`. Это было причиной моего создания символической ссылки. (Подозреваю, что ошибся в синтаксисе.) После прочтения этой страницы [https://askubuntu.com/questions/1320971/about-files-in-usr-include-x86-64-linux-gnu] мне кажется, что `usr/include/sys` должен существовать. Мне явно нужно провести дополнительное исследование по этому вопросу.
N0rbert avatar
флаг zw
Мой главный вопрос здесь - какое приложение вы пытаетесь «сделать» в исходном вопросе выше? Не могли бы вы поделиться ссылкой на его источники?
флаг gb
Извините за поздний ответ... Я не могу вставить сюда код. Основная причина в том, что это внутренний проект компании. Мои коллеги, наверное, были бы, мягко говоря, расстроены. Компания позволяет нам выбирать, какую операционную систему использовать, а другие члены команды используют другие разновидности Linux или используют Windows. Возможно, мне придется попробовать более сложный подход, который вы описываете, но прежде чем я это сделаю, я хочу выяснить, что именно он делает. Я дам вам знать, что происходит.
флаг gb
В конце концов мне не нужно было использовать подход dpkg/grep/awk/sed. Переустановки libc6-dev было достаточно. На самом деле были проблемы с Makefile в используемой ветке репозитория git.

Ответить или комментировать

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