Где мой каталог / usr / include / sys?

13

Я недавно обновил Kubuntu 12.04 до 13.04, полная переустановка.

Использование gcc 4.7.3. Я скомпилировал несколько программ, чтобы обнаружить, что нет /usr/include/sysкаталога. То есть, types.hи stat.hт. Д. Отсутствуют. Они существуют в include/linuxкаталоге, но нет include/sys.

В чем дело?

Утка
источник
Что за сообщение об ошибке печатает GCC? Пожалуйста, отредактируйте вопрос, чтобы предоставить эту и другую информацию, связанную с вашей проблемой.
Эдвин
1
У вас есть необходимая сборка?
Сет
Несколько программ, которые я пытался скомпилировать нормально, поэтому нет сообщения об ошибке от gcc. Я просто не могу понять, откуда взялся заголовок. У меня есть редактор, который создает ссылки на функции и системные вызовы и тому подобное, и я не рад, что не может найти каталог.
Утка
1
Да, сборка обязательна.
Утка

Ответы:

13

Если вы используете Ubuntu на 64-битной системе (я не могу прямо сейчас писать на 32-битной системе), то каталог с вопросом:

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

Теперь, имея эту информацию, вы можете создавать символические ссылки на эти файлы, если они вам действительно нужны в этом месте ( /usr/include/sys), используя это на терминале:

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc
Раду Рэдяну
источник
Да, 64 бит Я читал нечто подобное в другом месте, и кажется, что все находится в этом каталоге, но я не уверен, как заголовки включаются из "#include sys / stat.h" в каталог x86_64 / sys. Это какая-то новая особенность инъекции gcc? Вне руки я не вижу символических ссылок или тому подобного, что (внешне) привело бы к такому поведению.
Утка
Похоже, мы прошли друг друга на ветру. Итак, суть в том, что компилятор творит чудеса, но мне может понадобиться использовать некоторые хакерские ссылки, чтобы сделать мой редактор счастливым?
Утка
@Duck Я только что отредактировал свой ответ за 2 минуты до вашего комментария :)
Раду Рэдяну
5

установите libc6-dev-amd64, если вы работаете на 64-битной Linux. Введите следующую команду в терминале Ubuntu:

sudo apt-get install libc6-dev-amd64
Ниведита Велагалети
источник
1

каталог sys - это каталог системных заголовков unix / linux с большим количеством системных команд. Различные бренды / версии Linux могут поставить его в разных местах. Следующая команда может помочь вам:

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

Первый из них является домом для системных заголовков BSD unix.
Второй - это каталог, содержащий 64-битные системные главы Linux.

У меня проблемы с cmake, так как я не могу найти файл sys / stat.h. Мое временное решение - сделать символическую ссылку

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

Я не хочу загрязнять каталог / usr / include, и я делаю ссылку только на один конкретный заголовочный файл, а не на весь каталог sys. Я думаю, что это недостаток cmake, поэтому он оказывает минимальное влияние, делая только одну ссылку. Надеюсь, что это может помочь тем, кто страдает от той же проблемы.

Кемин Чжоу
источник
1

Давайте проверим, каков путь поиска по умолчанию для gcc. Из этого ответа мы получаем следующую команду:

gcc -xc -E -v -

В конце вывода я вижу это на моей машине:

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

Обратите внимание на последнюю строку. Это означает, что когда вы компилируете файл C с помощью #include <sys/stat.h>, gcc будет искать, /usr/include/x86_64-linux-gnu/sys/stat.hпрежде чем пытаться /usr/include/sys/stat.h, без нас ничего символической ссылки.

legoscia
источник
0

Поскольку моя архитектура amd64 нет libc6-dev-amd64. Пакет для установки libc6-dev-i386.

Это исправило зависимость для CPAN-пакета.

Яри ​​Туркиа
источник
«Поскольку моя архитектура amd64, то нет libc6-dev-amd64» : что вы имеете в виду?
Марк Ванхомиссен
Я имею в виду, что в архитектуре x86_64 библиотеки / kernel / etc. пакеты имеют архитектуру amd64. Итак, libc6-dev-amd64 недоступна для установки. Проблема по-прежнему сохраняется, некоторые программы ожидают увидеть / usr / include / sys /.
Яри ​​Туркиа