Где разместить библиотеки
Лучшее решение - использовать систему упаковки вашего дистрибутива Linux (apt-get
, yum
или аналогичную) для установки библиотек из пакетов, предоставляемых дистрибутивом, где это возможно.
Если упакованные библиотеки дистрибутива не имеют достаточно свежей версии, или если вам нужны нестандартные параметры сборки, или если вам нужна библиотека, которую ваш дистрибутив не предоставляет, вы можете собрать и установить ее самостоятельно. У вас есть два основных варианта расположения библиотеки:
/usr/local
(библиотеки под /usr/local/lib
, заголовки под /usr/local/include
). Это устанавливает библиотеки в масштабе всей системы и, вероятно, является самым простым решением, поскольку тогда вы сможете использовать их без каких-либо дополнительных действий. НЕ устанавливайте библиотеки непосредственно под /usr
, так как это повлияет на систему упаковки вашего дистрибутива.
- В каталоге вашего проекта, как вы это делали в Windows. Это дает преимущества, заключающиеся в том, что вам не требуется доступ с правами root и внесение изменений в масштабах всей системы, но вам придется обновлять пути к своим проектам и пути к библиотекам, а также размещать любые файлы общей библиотеки там, где динамический компоновщик может найти их (используя
LD_LIBRARY_PATH
или ld.so.conf
- см. Ссылку для более подробной информации).
Как работают библиотеки
См. Превосходную библиотеку программирования Дэвида А. Уилера HOWTO . Я бы рекомендовал прочитать это, а затем публиковать любые конкретные вопросы в качестве новых тем.
Как распространять вашу программу
Традиционно программы Unix / Linux не содержат копий своих зависимостей. Вместо этого сами конечные пользователи или разработчики сами устанавливают эти зависимости. Это может потребовать «большого README», как вы сказали, но у него есть несколько преимуществ:
- Библиотеки разработки могут устанавливаться, управляться и обновляться через менеджер пакетов дистрибутива, вместо того чтобы каждая исходная копия имела свой собственный набор библиотек для отслеживания.
- В системе есть только одна копия любой данной библиотеки, поэтому есть только одно место, которое необходимо обновить, если, например, обнаружен брешь в безопасности. (Например, рассмотрим хаос, который возник, когда было обнаружено, что zlib , очень широко используемая библиотека сжатия, имеет недостаток безопасности , поэтому каждое приложение, включающее уязвимую версию, должно быть обновлена.)
- Если ваша программа достаточно популярна (и с открытым исходным кодом или, по крайней мере, свободно доступна), тогда разработчики пакетов для различных дистрибутивов Linux могут захотеть упаковать ее и включить в свой дистрибутив. Сопровождающие пакетов на самом деле не любят связанные библиотеки. Смотрите, например, страницу Fedora по теме .
Если вы распространяете свою программу среди конечных пользователей, возможно, вы захотите предложить пакет (.dpkg
или .rpm
), который они могли бы просто загрузить и установить без использования исходного кода. В идеале, с точки зрения конечного пользователя, пакет должен быть добавлен в репозитории дистрибутивов (если он с открытым исходным кодом или, по крайней мере, свободно доступен), чтобы пользователи могли загрузить его с помощью своих менеджеров пакетов (apt-get
или yum
). Это может все усложниться из-за большого количества дистрибутивов Linux, но совместимый с Debian / Ubuntu .dpkg
и совместимый с Red Hat / CentOS / Fedora .rpm
должен охватывать значительный процент конечных пользователей. Сборка пакетов не слишком сложна, и в Интернете есть хорошие инструкции.