5

Я должен признать, что я чувствую себя полностью потерянным каждый раз, когда мне приходится выполнять зависимости некоторого кода C или C++. В настоящее время я нахожусь на Ubuntu 9.10 (Karmic Koala), но я помню то же чувство одиночества от Windows.

Я действительно думаю, что понимаю C, C++, статические и динамические библиотеки, заголовочные файлы и ссылки, а также менеджер пакетов "aptitude", но когда дело доходит до практической части, я абсолютно не знаю, что делать. Даже если мне это удастся, я не знаю, как я туда попал и ничему не научусь.

Например, сегодня я хотел использовать код, который утверждает, что «он использует glib2, curl и openssl». В конце я понял, что curl и openssl уже установлены, но мне нужно было установить libcurl3-dev через мой менеджер пакетов, который также потребует (и установит) libcurl4-openssl-dev чтобы мне не пришлось беспокоиться об OpenSSL. Но мне пришлось выбирать эти имена пакетов из 67 похожих по звучанию альтернатив. А glib , с другой стороны, нужно было загружать и собирать вручную, поскольку не было никакого соответствующего пакета.

Мне понадобилось несколько часов, чтобы выяснить это, и это не первый раз. Итак, мой вопрос действительно таков:

Когда у меня есть расплывчатое описание зависимостей:

  • Как узнать, какие из них уже установлены?
  • Как мне определить, что из этого может быть выполнено путем установки пакетов?
  • Как мне узнать точные названия этих пакетов?
  • Если пакет должен быть собран из исходного кода, как я могу гарантировать, что я не потеряюсь в бесконечных зависимостях этого источника и зависимостях этих зависимостей ...?
  • Я думаю, что мне также нужно связать библиотеки с моими объектными файлами. Если один пакет поставляется с несколькими файлами статической библиотеки, как мне узнать (без проб и ошибок), какой из них связать?

2 ответа2

3

Выяснение, какие пакеты установить для удовлетворения зависимостей, не является точной наукой. Но есть несколько советов, которые могут вам помочь:

  • Когда вы работаете с удовлетворяющими зависимостями для компиляции чего-либо, вам почти всегда нужен пакет, заканчивающийся на -dev . Это сокращение для развития. Например, пакет openssl содержит инструменты командной строки и библиотеки для работы с шифрованием. libssl-dev содержит заголовочные файлы и библиотеки для разработки openssl.
  • Для поиска пакета по ключевому слову с помощью apt используйте apt-cache search . Например, я фактически не знал, что libssl-dev было тем, что было названием пакета openssl dev. Я обнаружил, что с помощью этой команды: apt-cache search openssl | grep dev а затем перейдем к тому, который не связан с другим языком / библиотекой.
  • Вы можете увидеть, какие пакеты вы установили, используя dpkg -l , но, в общем, просто найдите нужный вам пакет и скажите apt, чтобы установить его, если он у вас уже есть, тогда apt сообщит вам. Еще один хороший совет: если вы хотите узнать, какому пакету принадлежит файл, используйте dpkg -S /path/to/thefile
  • Если вам в конечном итоге понадобится собрать пакет из исходного кода, не существует простого способа разрешить дерево зависимостей. ./configure должен сообщить вам, или файл README. Часто они даже назовут точный требуемый пакет.
  • Чтобы выяснить, что связать, обычно это связано с именем пакета или наиболее общим названием того, что вы хотите. В нашем примере с libssl вы просто передаете -lssl в gcc. Если вы не знаете, какие есть опции для -l , загляните в / lib / (просто удалите "lib" спереди и ".so ..." сзади, чтобы получить 'middle', который передается в gcc).
2

Никто не упомянул

aptitude build-dep

Запись man-страницы довольно полная.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .