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