Я только что загрузил несколько новых файлов заголовков и имею папку из них, которую я хочу сделать доступной. Во-первых, я хотел бы сделать их доступными для любых файлов, желающих их использовать. Поэтому я хотел бы включить новый заголовочный файл (назовите его newheader.h), где я хочу, например, как math.h. Где я должен это поставить?
Во-вторых, я хочу сделать эти файлы доступными для всех пользователей. У меня есть права root. Есть ли специальный каталог, в который мне нужно его поместить? Большое спасибо!
Вопрос в том, чего вы хотите достичь?
Обычно у вас есть три сценария:
разработка локальной установки (в вашей $HOME) глобальной установкеДля первых 2 вы, вероятно, должны использовать переключатель -I, чтобы указать путь к заголовкам. Первый, вероятно, будет -I../mylib/include, второй может быть -I/home/user/local_libs/somelib/include.
Третья - глобальная установка, которая должна размещать их в /usr/local/include, но управляться с помощью инструмента, такого как automake или cmake. [Info]
При использовании automake у вас могут появляться уведомления, чем параметр --prefix по умолчанию /usr/local для безопасная установка, которая не мешает системным пакетам, в то время как поддерживающие debian работают ./configure --prefix=/usr в своих сценариях пакетов. Путь включения построен из этого префикса, поэтому он следует за установкой пакета.
Сохраните их в папке /usr/local/include. Из http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html в этом каталоге элементы «... не могут быть перезаписаны при обновлении системного программного обеспечения», что важно, поскольку вы делаете не хотите, чтобы файлы заголовков, которые вы загрузили, были сбиты с помощью системных обновлений, что может произойти, если вы поместите их в /usr/include.
В моей системе каталог /usr/local/include/ существует и пуст. В стандарте Filsystem Hierarchy Standard (FHS 3.0) используется каталог /usr/local/include. Файлы должны быть читаемыми по всему миру (0444), а каталоги должны быть доступны для поиска (0555).
Как правило, мы не кодируем в вакууме, а то, что мы пишем, основывается на том, что другие писали перед нами. Предполагая, что ваши программы на C и связанные с ними файлы заголовков (.h) основаны на другой программной системе, тогда вы должны смоделировать структуру своей каталогов после их.
Поскольку я понятия не имею о вашей среде, давайте возьмем общую программу и посмотреть, какую структуру каталогов они использовали для своих файлов заголовков:
$ `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/5
/usr/include/x86_64-linux-gnu/c++/5
/usr/include/c++/5/backward
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include
End of search list.
У меня нет специальных библиотек C или заголовков, установленных в моей системе, поэтому каждый должен иметь возможность реплицировать этот поиск «из коробки».
Когда вы переходите к: /usr/include/x86_64-linux-gnu/c++/5, вы видите, что заголовочные файлы включены в программы C. Поэтому нет жесткого и правильного правила, что заголовки должны быть в их собственном каталоге.
Когда дело доходит до программирования, вы можете помещать файлы в любом месте и называть их чем угодно. Конечно, независимо от того, что вы решите, это должно иметь смысл для вас и ваших сотрудников.
Проверить, где хранятся файлы заголовков:
$ locate *version.h*
/lib/firmware/carl9170fw/include/shared/version.h
/usr/include/linux/version.h
/usr/include/linux/dvb/version.h
/usr/include/x86_64-linux-gnu/gnu/libc-version.h
/usr/lib/python3/dist-packages/lxml/includes/lxml-version.h
/usr/lib/x86_64-linux-gnu/perl/5.22.1/CORE/git_version.h
/usr/src/linux-headers-3.16.53-031653/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-3.16.53-031653/include/xen/interface/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/localversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/generated/uapi/linux/version.h
/usr/src/linux-headers-4.10.0-28/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-4.10.0-28/include/xen/interface/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/localversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/generated/uapi/linux/version.h
Это только верх моего списка.
Основываясь на существующих местоположениях заголовков, я бы склонен создавать каталог:
/usr/include/ourcompany/
для хранения всех файлов заголовков (.h).
Однако, как указывали другие, популярное местоположение:
/usr/local/include/
В этой статье, написанной Ричардом Столлманом и другими, они пишут:
По умолчанию gcc ищет следующие каталоги для файлов заголовков:
/usr/local/include/
/usr/include/
и следующие каталоги для библиотек:
/usr/local/lib/
/usr/lib/
Вопрос в том, чего вы хотите достичь?
Обычно у вас есть три сценария:
разработка локальной установки (в вашей $HOME) глобальной установкеДля первых 2 вы, вероятно, должны использовать переключатель -I, чтобы указать путь к заголовкам. Первый, вероятно, будет -I../mylib/include, второй может быть -I/home/user/local_libs/somelib/include.
Третья - глобальная установка, которая должна размещать их в /usr/local/include, но управляться с помощью инструмента, такого как automake или cmake. [Info]
При использовании automake у вас могут появляться уведомления, чем параметр --prefix по умолчанию /usr/local для безопасная установка, которая не мешает системным пакетам, в то время как поддерживающие debian работают ./configure --prefix=/usr в своих сценариях пакетов. Путь включения построен из этого префикса, поэтому он следует за установкой пакета.
Сохраните их в папке /usr/local/include. Из http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html в этом каталоге элементы «... не могут быть перезаписаны при обновлении системного программного обеспечения», что важно, поскольку вы делаете не хотите, чтобы файлы заголовков, которые вы загрузили, были сбиты с помощью системных обновлений, что может произойти, если вы поместите их в /usr/include.
В моей системе каталог /usr/local/include/ существует и пуст. В стандарте Filsystem Hierarchy Standard (FHS 3.0) используется каталог /usr/local/include. Файлы должны быть читаемыми по всему миру (0444), а каталоги должны быть доступны для поиска (0555).
Как правило, мы не кодируем в вакууме, а то, что мы пишем, основывается на том, что другие писали перед нами. Предполагая, что ваши программы на C и связанные с ними файлы заголовков (.h) основаны на другой программной системе, тогда вы должны смоделировать структуру своей каталогов после их.
Поскольку я понятия не имею о вашей среде, давайте возьмем общую программу и посмотреть, какую структуру каталогов они использовали для своих файлов заголовков:
$ `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/5
/usr/include/x86_64-linux-gnu/c++/5
/usr/include/c++/5/backward
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include
End of search list.
У меня нет специальных библиотек C или заголовков, установленных в моей системе, поэтому каждый должен иметь возможность реплицировать этот поиск «из коробки».
Когда вы переходите к: /usr/include/x86_64-linux-gnu/c++/5, вы видите, что заголовочные файлы включены в программы C. Поэтому нет жесткого и правильного правила, что заголовки должны быть в их собственном каталоге.
Когда дело доходит до программирования, вы можете помещать файлы в любом месте и называть их чем угодно. Конечно, независимо от того, что вы решите, это должно иметь смысл для вас и ваших сотрудников.
Проверить, где хранятся файлы заголовков:
$ locate *version.h*
/lib/firmware/carl9170fw/include/shared/version.h
/usr/include/linux/version.h
/usr/include/linux/dvb/version.h
/usr/include/x86_64-linux-gnu/gnu/libc-version.h
/usr/lib/python3/dist-packages/lxml/includes/lxml-version.h
/usr/lib/x86_64-linux-gnu/perl/5.22.1/CORE/git_version.h
/usr/src/linux-headers-3.16.53-031653/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-3.16.53-031653/include/xen/interface/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/localversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/generated/uapi/linux/version.h
/usr/src/linux-headers-4.10.0-28/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-4.10.0-28/include/xen/interface/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/localversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/generated/uapi/linux/version.h
Это только верх моего списка.
Основываясь на существующих местоположениях заголовков, я бы склонен создавать каталог:
/usr/include/ourcompany/
для хранения всех файлов заголовков (.h).
Однако, как указывали другие, популярное местоположение:
/usr/local/include/
В этой статье, написанной Ричардом Столлманом и другими, они пишут:
По умолчанию gcc ищет следующие каталоги для файлов заголовков:
/usr/local/include/
/usr/include/
и следующие каталоги для библиотек:
/usr/local/lib/
/usr/lib/