2012-05-23 3 views
2

Смущающе основной вопрос. sudo apt-get install libmemcached6 - где живут .h и .o или .so в обычной установке на Linux-машине (Ubuntu)? И, как я могу убедиться, что g ++ может их забрать?Где хранятся файлы заголовков C в Linux

+0

г ++ может забрать их, если они установлены правильно, потому что они должны быть в PATH. В противном случае вы можете сами ставить библиотеку и статически размещать ее в папке по вашему выбору. –

ответ

9

Они идут в/usr/include и/usr/lib. Если вы используете опцию -l (для библиотек), она должна найти их из этих стандартных мест. Если вы включите использование <file.h>, оно также должно быть доставлено из нужного места.

+0

Обнаружено так в/usr/lib. Нет заголовка в/usr/include. Возможно, это что-то не включено в установку apt-get, и мне просто нужно самому приобрести источник? – djechlin

+7

mostprobably ваша библиотека имеет версию -dev, которая устанавливает заголовок, и это один раз устанавливает требования к времени выполнения (иначе .so) попробовать сделать поиска APT-кэша libmemcached6 и посмотреть, если есть libmemcached6-DEV пакет файлы разработки. что добавит заголовочный файл – mohaps

+0

Спасибо, мне нужна версия -dev. g ++ myfile.cpp теперь работает чистым. – djechlin

10

На Ubuntu (и других вариантах Debian) вы можете использовать команду dpkg, чтобы узнать. Например:

$ dpkg -L libxml2 
/. 
/usr 
/usr/share 
/usr/share/doc 
/usr/share/doc/libxml2 
/usr/share/doc/libxml2/AUTHORS 
/usr/share/doc/libxml2/NEWS.gz 
/usr/share/doc/libxml2/TODO.gz 
/usr/share/doc/libxml2/copyright 
/usr/share/doc/libxml2/README 
/usr/share/doc/libxml2/changelog.Debian.gz 
/usr/share/doc/libxml2/README.Debian 
/usr/lib 
/usr/lib/libxml2.so.2.7.8 
/usr/lib/libxml2.so.2 

Как вы можете видеть, пакеты Debian обычно не включают .h файлы; они обычно находятся в соответствующих пакетах -dev. Таким образом, вы можете найти файлы заголовков здесь:

$ dpkg -L libxml2-dev 
/. 
/usr 
/usr/share 
/usr/share/doc 
/usr/share/doc/libxml2-dev 
/usr/share/doc/libxml2-dev/AUTHORS 
/usr/share/doc/libxml2-dev/NEWS.gz 
/usr/share/doc/libxml2-dev/TODO.gz 
/usr/share/doc/libxml2-dev/copyright 
/usr/share/doc/libxml2-dev/README 
/usr/share/doc/libxml2-dev/changelog.Debian.gz 
/usr/share/aclocal 
/usr/share/aclocal/libxml2.m4 
/usr/share/man 
/usr/share/man/man3 
/usr/share/man/man3/libxml.3.gz 
/usr/share/man/man1 
/usr/share/man/man1/xml2-config.1.gz 
/usr/include 
/usr/include/libxml2 
/usr/include/libxml2/libxml 
/usr/include/libxml2/libxml/HTMLtree.h 
/usr/include/libxml2/libxml/tree.h 
/usr/include/libxml2/libxml/xmlreader.h 
/usr/include/libxml2/libxml/xmlschemastypes.h 
... 

Что касается gcc, the manual объясняет, как он ищет файлы заголовков. Обратите внимание, что это отличается и отличается от using -l to instruct the linker to link with a certain library.

1

В Linux и большинстве систем Unix на основе, библиотеки можно найти на любом из этих двух мест:

  1. /USR/Библиотека/
  2. /USR/местные/Библиотека/

Разница между этими двумя местоположениями заключается в том, что последний используется для сторонних библиотек. Поэтому, если вы опубликовали свою собственную библиотеку или установили ее из стороннего репозитория (например, ppa), эти файлы должны перейти в /usr/local/lib.

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

  1. /USR/включать/
  2. /USR/местные/включить/
Смежные вопросы