Недавно я обновился с Kubuntu 12.04 до 13.04, полностью переустановив.
Используя gcc 4.7.3. Я скомпилировал несколько программ, чтобы обнаружить, что каталога нет /usr/include/sys
. То есть, types.h
, stat.h
и т. д. отсутствуют. Они существуют в include/linux
каталоге, но не include/sys
.
Что происходит?
решение1
Если вы используете 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
решение2
Установите libc6-dev-amd64, если вы работаете на 64-битном Linux. Введите следующую команду в терминале Ubuntu:
sudo apt-get install libc6-dev-amd64
решение3
Давайте проверим, какой путь поиска include по умолчанию используется в 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
, без необходимости делать симлинк на что-либо.
решение4
Так как моя архитектура amd64, то нет libc6-dev-amd64
. Пакет для установки — libc6-dev-i386
.
Это исправило зависимость для CPAN-пакета.