Как добавить библиотеки в C++?

Да это - немой вопрос... Однако в обоих из моих классов C++ мы не сделали этого вообще (за исключением собственных библиотек: iostream, iomanip, и т.д.)... Моим вопросом является банка, которую кто-либо предоставляет ссылке, которая дает общее объяснение добавляющих библиотек к C++?

Я действительно понимаю что, что означает #include; это просто, у меня нет подсказки о компоновщике/каталогах в IDE C++.

Такой длинный короткий вопрос; я мог получить общее объяснение терминов, использованных к библиотекам ссылок в C++?

Я использую c:: b w/MinGW.

22
задан 1 May 2010 в 11:28
поделиться

2 ответа

Это, вероятно, заинтересует вас, но вот краткая версия:

Когда вы собираете .cpp, .c или другие файлы, каждая единица трансляции (то есть каждый файл) создает объектный файл. При создании конечного исполняемого файла вы объединяете все объектные файлы в один двоичный файл. Для статических библиотек вы компилируете статический архив (.a или .lib) вместе со всеми объектными файлами в сам двоичный файл. Для связывания с динамическими разделяемыми объектами (.so или .dll) двоичный файл создается с помощью обращений к глобальной таблице смещений, и вы сообщаете компоновщику, что хотите связать его с разделяемым объектом, а загрузчик операционной системы создает соответствующий образ при запуске программы.

Общее объяснение терминов, используемых для компоновки библиотек в C++

Начиная с...

трансляция - Здесь код высокого уровня (на C, Fortran или любом другом языке) переводится в ассемблерный код с помощью блока трансляции. Таким образом, каждый файл .cpp внутренне переводится в ассемблер для конкретной архитектуры.

assemble - Генерирует объектные файлы из сгенерированного ассемблера. Объектные файлы - это почти машинный код, но в них много "неразрешенных внешних символов", которые можно представить как указатели на реальные определения функций.

компоновка - при этом все ваши объектные файлы собираются в целостный двоичный файл, будь то динамический разделяемый объект или исполняемый файл. Вам нужно указать компоновщику, где он должен найти все эти неразрешенные внешние объекты с предыдущего этапа, иначе они будут отображаться как ошибки здесь.

Теперь двоичный файл сидит на диске, который ждет, пока...

loader - Операционная система загружает двоичный файл с диска, который содержит всю информацию, необходимую для создания образа программы. Хотя детали зависят от конкретной платформы, загрузчик, как правило, выполняет задачу поиска всех ссылок на разделяемые библиотеки, созданные компоновщиком, их загрузки (рекурсивно, поскольку каждый DSO может иметь свои собственные зависимости) и помещения в пространство памяти программы.

19
ответ дан 29 November 2019 в 05:38
поделиться

Это огромная тема, на которую я не хочу давать окончательный ответ. Однако, поскольку вы говорите, что используете Code::Blocks, вот последовательность добавления библиотеки в проект:

  • Перейдите в меню Project
  • Перейдите к Build Options....
  • В диалоге опций выберите вкладку Linker Settings
  • С помощью кнопки Add выберите библиотеку и добавьте ее в проект
3
ответ дан 29 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

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