Установка библиотек и заголовочных файлов под Ubuntu Linux для разработки на C / C ++

13519
Lena Schimmel

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

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

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

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

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

  • Как узнать, какие из них уже установлены?
  • Как мне определить, что из этого может быть выполнено путем установки пакетов?
  • Как мне узнать точные названия этих пакетов?
  • Если пакет должен быть собран из исходного кода, как я могу гарантировать, что я не потеряюсь в бесконечных зависимостях этого источника и зависимостях этих зависимостей ...?
  • Я думаю, что мне также нужно связать библиотеки с моими объектными файлами. Если один пакет поставляется с несколькими файлами статической библиотеки, как мне узнать (без проб и ошибок), какой из них связать?
5
Этот сайт о программировании, а не о печали. Как насчет более краткого описания конкретной проблемы? bmargulies 14 лет назад 0
Сначала я чувствовал, что это был незначительный вопрос программирования, но чем больше я думал об этом, тем лучше. Многие разработчики расстроены - кого * не * толкнули в кроличью нору, и он потратил целое утро на составление 12 зависимостей? Я думаю, что этот вопрос имеет более широкую аудиторию, чем большинство хотят признать. Duck 14 лет назад 1
Это читается как «Как использовать менеджер пакетов?» вопрос ко мне и таким образом Super User фураж. OTOH я вижу "Как мне запустить и установить зависимости * вручную *?" как более подходящий для SO, потому что в отсутствие хорошей документации для каждой вещи, которую вы должны получить, вы в конечном итоге читаете `. / configure` и` make`, ища соответствующее сообщение об ошибке в торренте ... dmckee 14 лет назад 0
Пакет разработки для библиотеки glib2 называется, хотите верьте, хотите нет, libglib2.0-dev user23307 14 лет назад 0
@justin: спасибо. Я искал http://packages.debian.org для «glib», и это не дало никакого полезного результата. Я не понял, что мне нужно искать "glib2", а затем я получаю "glib2.0dev" Lena Schimmel 14 лет назад 0
О переходе на SuperUser: я не совсем уверен насчет границы между Stackoverflow и SuperUser, но этот вопрос связан с программированием. Я знаю, как использовать менеджер пакетов, но я спросил, как использовать его для разрешения пакетов, необходимых для ПРОГРАММИРОВАНИЯ. Различие между установкой пакета "curl" и "libcurl4-openssl-dev" - это как раз и разница между пользователем и программистом, и в этом и заключается весь вопрос. (Извините за использование заглавных букв, но так как я не выделил курсивом или жирным шрифтом в комментариях, мне пришлось это сделать). Я думаю, что не программирующий пользователь не выиграет от этого. Lena Schimmel 14 лет назад 0
@bmargulies: Да, вообще плохая идея написать вопрос о переполнении стека в плохом настроении, и мне следовало приложить еще больше усилий, чтобы сделать этот вопрос более кратким. Но в любом случае, это «ключевая особенность» этого вопроса - не слишком конкретизировать. Видите ли, я не хочу знать, как называется пакет для пакета curl development, поскольку я уже понял, что это "libcurl3-dev". Вместо этого я спрашиваю, каков общий способ выяснить это, поэтому я знаю, что делать в следующий раз, когда возникнет эта проблема. Lena Schimmel 14 лет назад 0

2 ответа на вопрос

3
SoapBox

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

  • Когда вы работаете с удовлетворяющими зависимостями для компиляции чего-либо, вам почти всегда нужен пакет, который заканчивается -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 ...» сзади, чтобы получить «середину», которая передается в gcc).
Функции поиска содержимого пакета на http://packages.debian.org также являются отличным ресурсом. 14 лет назад 2
добавить некоторую информацию о "apt-file search foo.h" ... http://debianhelp.de/apt-file.html, иначе ваш ответ в значительной степени завершен akira 14 лет назад 2
@akira: apt-file выглядит довольно круто. Я не знал об этом раньше, большое спасибо. Ты должен был сделать это отдельным ответом, ты бы получил от меня ответ;) Lena Schimmel 14 лет назад 1
2
malte

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

aptitude build-dep 

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

Похожие вопросы