Сборка / Установка программного обеспечения с внешними зависимостями на Linux
Подобные вещи случаются со мной чаще, чем следовало бы. Часто, когда я создаю исходный код какой-либо программы или даже просто устанавливаю программу с внешними зависимостями, которых еще нет на моем компьютере, мне приходится выполнять бесчисленные поиски в Google, чтобы найти библиотеку, которую я на самом деле пропускаю.
Недавний пример - MathGL, который, когда я впервые попытался установить его, сказал, что в нем отсутствуют некоторые зависимости, но не упомянул, что мне нужно apt-get install libmgl-dev
, Это просто общеизвестно? Я не видел упоминаний о libmgl-dev
в любом из файлов README или INSTALL или на их веб-сайте. Я даже сделал grep для всего каталога в поисках упоминания libmgl-dev
и я ничего не нашла. После долгих поисков в Google мне удалось найти его в каком-то сообщении на форуме, в котором я сказал, что это необходимо.
Должно быть что-то не так с моей методологией. При установке чего-либо, есть ли стандартный способ определить, какие зависимости мне нужны в первую очередь? Большое спасибо!
2 ответа
Если команда разработчиков работает отлично и / или профессионально./configure скажет вам, чего не хватает, к сожалению, такой вид программирования является исключением, а не правилом.
при запуске make a (я забыл точное сообщение об ошибке) будет отображаться определенный тип пропущенного сообщения об ошибке.
Расположение зависимостей зависит от языка. Может быть, у кого-то есть способ получше, но вот как я это делаю. В языке программирования C есть операторы < filename.h >, которые указывают заголовочные файлы. Если вы ищете в заголовочных файлах текущие папки и не можете их найти, есть вероятность, что это часть другой библиотеки. В зависимости от дистрибутива стандартные файлы заголовков находятся в разных местах. В OpenSuSE / usr / include содержатся все файлы заголовков для программ, в которых уже установлен -dev. Если его нет в любом месте, скорее всего, вам не хватает библиотеки, которую нужно установить.
В Perl это использование Something:: subfunction ; это указывает на то, что он вызывает и внешний модуль / библиотека.
В php есть индикаторы include, include_once, require и require_once.
Другие языки имеют разные методы.
Большая часть программного обеспечения будет включать в себя список зависимостей, которые ему требуются, хотя этот список не обязательно может быть в наиболее удобной форме для их поиска и установки.
Для произвольного примера предположим, что вы хотите скомпилировать Gnumeric, приложение для работы с электронными таблицами. Вы скачиваете исходный код и смотрите в файле README, в котором есть раздел
Requirements
------------
You need: Debian package name
glib >= 2.28.0 libglib2.0-dev
gtk+ >= 3.2.0 libgtk3.0-dev
libgsf >= 1.14.24 libgsf-1-dev
libgoffice >= 0.10.1 libgoffice-0-8-dev
gnome-xml >= 2.4.12 libxml2-dev
pango >= 1.24.0 libpango1.0-dev
NOTE: gnome-xml is also known as libxml
Optionally:
python >= 2.0 python-dev
pygobject >= 3.0.0 python-gi-dev
The GDA plugin, for accessing databases
gda >= 1.3.0 libgda2-dev
libgnomedb >= 1.3.0 libgnomedb2-dev
Currently disabled:
guile >= 1.5 (no maintainer)
Runtime suggestions:
'yelp' for help
Теперь это лучший сценарий, они сообщают вам необходимые библиотеки и говорят вам точный пакет Debian, который вам нужно установить, чтобы получить их. Например, вы бы просто запустить
$sudo apt-get install libglib2.0-dev
установить первую зависимость.
Однако второй столбец "имя пакета debian" встречается не так часто в большинстве программных пакетов. Вместо этого у них будет только первый столбец "glib" и, возможно, номер версии. Вы можете подтвердить именованную зависимость "glib" с именем пакета debian (или ubuntu и т. Д.) "Libglib2.0-dev". Обычно некоторые поисковые запросы в Интернете или на форумах помогут вам найти название пакета.
Имея некоторый опыт, вы заметите шаблоны в названиях пакетов, которые вам нужны. Как правило, библиотеки упакованы с именами libXXXX, и, как правило, они разделены на компоненты времени выполнения (libXXX) и файлы разработки, необходимые для компиляции вашей программы (libXXX-dev). Кроме того, если вы не можете найти нужный пакет с помощью простого веб-поиска, посмотрите на конкретное сообщение об ошибке, которое вы получаете, когда пытаетесь скомпилировать. Например, если отсутствует файл "glib.h", вы можете использовать поиск пакетов вашего дистрибутива, чтобы найти пакеты, содержащие этот файл, или, в более общем случае, вы всегда можете просто искать эти сообщения об ошибках в Интернете, чтобы найти других людей с такой же проблемой.,
Пакет действительно зависит от того, сколько информации они предоставляют о требуемых зависимостях, но наиболее распространенный метод - перечислить общее имя необходимой библиотеки. Затем человек, составляющий пакет, отвечает за выяснение того, как установить файлы разработки для этой библиотеки в своей конкретной конфигурации системы.
Если вы обнаружите программное обеспечение, которое никоим образом не перечисляет его зависимости, то отправьте отчет об ошибке, а тем временем приготовьтесь начать пробивать сообщения об ошибках.