Куда идут заголовочные файлы библиотеки C в Linux

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

Ответы на вопрос(3)

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

  1. /usr/lib/
  2. /usr/local/lib/

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

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

  1. /usr/include/
  2. /usr/local/include/

В 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, руководство объясняет, как он ищет заголовочные файлы. Обратите внимание, что это отличается и отличается отс помощью-l to instruct the linker to link with a certain library.

Решение Вопроса

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

Ваш ответ на вопрос