Де мій каталог / usr / include / sys?


14

Нещодавно я оновив з Kubuntu 12.04 до 13.04 повну перевстановку.

Використання gcc 4.7.3. Я склав деякі програми, щоб виявити, що немає /usr/include/sysкаталогу. Тобто types.h, stat.hі т. Д. Відсутні. Вони існують у include/linuxдовіднику, але ні include/sys.

Що відбувається?


Яке повідомлення про помилку друкує GCC? Будь ласка , змініть питання , щоб надати цю та іншу інформацію , пов'язану з вашою проблемою.
Едвін

1
У вас встановлена ​​необхідна збірка?
Сет

Пару програм, які я спробував скласти добре, щоб не було повідомлення про помилку від gcc. Я просто не можу зрозуміти, звідки береться заголовок. У мене є редактор, який створює посилання на функції та syscall тощо, і не тішиться тим, що він не може знайти каталог.
Качка

1
Так, суттєве значення має сучасний збір.
Качка

Відповіді:


14

Якщо ви використовуєте 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. Це якась нова роздута функція введення гкк? Поза межами я не бачу жодних символьних посилань або подібного, які (зовні) могли б призвести до такої поведінки.
Качка

Схоже, ми пройшли один одного на вітрі. Отже, підсумок полягає в тому, що компілятор робить якісь магії, але мені може знадобитися використовувати деякі хакі-симпосилання, щоб зробити мого редактора щасливим?
Качка

@Duck Я щойно відредагував свою відповідь до 2 хв ваших коментарів :)
Radu Rădeanu

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, без того, щоб нам нічого було посилати.


0

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

Це виправляло залежність для пакету CPAN.


"Оскільки моя архітектура - amd64, немає libc6-dev-amd64" : що ви маєте на увазі?
Марк Ванхуміссен

Я маю на увазі те, що в архітектурі x86_64, бібліотеках / ядрах тощо. пакунки мають архітектуру amd64. Отже, libc6-dev-amd64 не доступний для встановлення. Проблема все ще зберігається, деякі програми очікують побачити / usr / include / sys /.
Ярі Туркія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.