Я должен признать, что я чувствую себя полностью потерянным каждый раз, когда мне приходится выполнять зависимости некоторого кода C или C++. В настоящее время я нахожусь на Ubuntu 9.10 (Karmic Koala), но я помню то же чувство одиночества от Windows.
Я действительно думаю, что понимаю C, C++, статические и динамические библиотеки, заголовочные файлы и ссылки, а также менеджер пакетов "aptitude", но когда дело доходит до практической части, я абсолютно не знаю, что делать. Даже если мне это удастся, я не знаю, как я туда попал и ничему не научусь.
Например, сегодня я хотел использовать код, который утверждает, что «он использует glib2, curl и openssl». В конце я понял, что curl
и openssl
уже установлены, но мне нужно было установить libcurl3-dev
через мой менеджер пакетов, который также потребует (и установит) libcurl4-openssl-dev
чтобы мне не пришлось беспокоиться об OpenSSL. Но мне пришлось выбирать эти имена пакетов из 67 похожих по звучанию альтернатив. А glib
, с другой стороны, нужно было загружать и собирать вручную, поскольку не было никакого соответствующего пакета.
Мне понадобилось несколько часов, чтобы выяснить это, и это не первый раз. Итак, мой вопрос действительно таков:
Когда у меня есть расплывчатое описание зависимостей:
- Как узнать, какие из них уже установлены?
- Как мне определить, что из этого может быть выполнено путем установки пакетов?
- Как мне узнать точные названия этих пакетов?
- Если пакет должен быть собран из исходного кода, как я могу гарантировать, что я не потеряюсь в бесконечных зависимостях этого источника и зависимостях этих зависимостей ...?
- Я думаю, что мне также нужно связать библиотеки с моими объектными файлами. Если один пакет поставляется с несколькими файлами статической библиотеки, как мне узнать (без проб и ошибок), какой из них связать?