Как добавить библиотеку в c
Перейти к содержимому

Как добавить библиотеку в c

  • автор:

Как добавить библиотеку в c

Нередко различные классы и структуры оформляются в виде отдельных библиотек, которые компилируются в файлы dll и затем могут подключаться в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам.

Создадим и подключим библиотеку классов.

Возьмем имеющийся проект консольного приложения C#, например, созданный в прошлых темах. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем Add -> New Project. (Добавить новый проект):

Создание библиотеки классов в C#

Далее в списке шаблонов проекта найдем пункт Class Library :

Библиотека классов в C# и .NET

Затем дадим новому проекту какое-нибудь название, например, MyLib:

Class Library in .NET

После создания этого проекта в решение будет добавлен новый проект, в моем случае с названием MyLib:

Добавление нового проекта в C# и .NET

По умолчанию новый проект имеет один пустой класс Class1 в файле Class1.cs. Мы можем этот файл удалить или переименовать, как нам больше нравится.

Например, переименуем файл Class1.cs в Person.cs, а класс Class1 в Person. Определим в классе Person простейший код:

Новый проект в C# и .NET Core

Теперь скомпилируем библиотеку классов. Для этого нажмем правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт Rebuild :

Компиляция библиотеки классов в C# и .NET Core

После компиляции библиотеки классов в папке проекта в каталоге bin/Debug/net6.0 мы сможем найти скомпилированный файл dll (MyLib.dll). Подключим его в основной проект. Для этого в основном проекте нажмем правой кнопкой на узел Dependencies и в контекстном меню выберем пункт Add Project Reference. :

Добавление библиотеки классов в проекте на C# и .NET Core

Далее нам откроется окно для добавления библиотек. В этом окне выберем пункт Solution,который позволяет увидеть все библиотеки классов из проектов текущего решения, поставим отметку рядом с нашей библиотекой и нажмем на кнопку OK:

Если наша библиотека вдруг представляет файл dll, который не связан ни с каким проектом в нашем решении, то с помощью кнопки Browse мы можем найти местоположение файла dll и также его подключить.

How to add additional libraries to Visual Studio project?

Allergro is an open souce C++ addon library for graphics manipulation. How do I add this library to my compiler?

The instructions don’t work for me as I have Windows 7. I don’t know if the OS matters. I have the Visual Studio Express Edition. The library is a .dll file. How do I add it to my projects?

jww's user avatar

4 Answers 4

For Visual Studio you’ll want to right click on your project in the solution explorer and then click on Properties.

Next open Configuration Properties and then Linker.

Now you want to add the folder you have the Allegro libraries in to Additional Library Directories,

Linker -> Input you’ll add the actual library files under Additional Dependencies.

For the Header Files you’ll also want to include their directories under C/C++ -> Additional Include Directories.

If there is a dll have a copy of it in your main project folder, and done.

I would recommend putting the Allegro files in the your project folder and then using local references in for the library and header directories.

Doing this will allow you to run the application on other computers without having to install Allergo on the other computer.

This was written for Visual Studio 2008. For 2010 it should be roughly the same.

Как подключить библиотеку в программу на C++?

Как же подключить/загрузить внешнюю динамическую библиотеку в свою программу/проект, написанную на языке программирования C++ в IDE Microsoft Visual Studio, в ОС Microsoft Windows?

Состав

Типы файлов

Для начала, давайте разберёмся, что обычно представляет собой любая динамическая библиотека, написанная на, и созданная для программ С++? Это от 1 до 4 типов файлов:

  • Some.h — заголовочный файл, который объявляет функционал библиотеки, i.e., заголовочный текстовый файл с определениями всех доступных сущностей (переменных, констант, классов, методов, etc) данной библиотеки, которые можно вызывать и использовать.
  • Some.dll — предварительно скомпилированный бинарный файл, содержащий реализацию функционала библиотеки, т.е. непосредственно, сама динамическая библиотека. Чаще именуется просто как «dll библиотека».
  • Some.lib — библиотека импорта, содержащая таблицу импорта библиотеки. Это не статическая библиотека. Несмотря на то, что расширение файла библиотеки импорта совпадает со стандартным расширением статических библиотек, путать их не стоит.
  • Some.exp — библиотека экспорта, содержащая таблицу экспорта библиотеки.

Из всего списка главным являются только файлы с расширением .dll, т.е. остальных файлов может и не быть.

Количество

У одной библиотеки может быть множество файлов таких типов. Все они, обычно, рассортированы по соответствующим папкам, чтобы было легче подключать в IDE.

Вариации

Файлы dll, lib и exp различаются по платформе (ОС), архитектуре, конфигурации, etc. В одной версии библиотеки может предоставляться сразу несколько альтернативных вариаций одинаковых по функционалу файлов. E.g.:

  • Для x32 (x86) и x64 архитектуры/платформы.
  • Для конфигурации Release, Debug, etc. Для Debug конфигурации часто используются библиотеки с постфиксом *-d.dll, а для Release — без него.
  • Для разных IDE.
  • Для разных ОС. Составные файлы библиотек компилируется под каждую ОС отдельно, т.е. содержание и расширение зависит от ОС. E.g., в ОС MS Windows динамические библиотеки имеют расширение .dll, а в GNU/Linux — .so; статические в Win имеют расширение .lib, в ОС GNU/Linux — .a, соответственно.

Всё это крайне важно, всё надо учитывать при подключении библиотеки к проекту. Свойства проекта в Visual C++ могут устанавливаться отдельно для каждой конфигурации (Release, Debug) и архитектуры/платформы (x32 (x86), x64).

Подключение

Перед тем, как подключать файлы библиотеки к своей программе, надо сперва открыть необходимый проект в IDE Visual Studio: Главное меню > Файл > Открыть проект.

Заголовочные файлы (.h)

Заголовочных файлов чаще всего больше одного. Все они, обычно, находятся в папке «include» в любой библиотеке.
Каталог с заголовчными файлами (.h) библиотеки указывать здесь: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Общие > Дополнительные каталоги включаемых файлов.

Помимо указания IDE директории расположения заголовочных файлов (.h), их также по мере необходимости надо дополнительно явно указывать в коде с помощью директивы препроцессора #include . Необходимые заголовочные файлы подключаются в коде только там, где они нужны, т.е. где используются сущности определённые в этих файлах. Заголовочные файлы можно подключать как в файле с кодом (.cpp), так и в заголовочном файле (.h), но лучше подключать именно в заголовочном файле, а в файле кода не подключать, там подключить только свой заголовочный файл. В каждом заголовочном файле подключать требуемые заголовочные файлы так:

Файлы таблиц импорта и экспорта (.lib, .exp)

Файлы таблиц импорта и экспорта (.lib, .exp), обычно, находятся в папке «lib» в любой библиотеке.
Каталог с файлами таблиц импорта (.lib) библиотеки указывать здесь: Главное меню > Проект > Свойства проекта > Свойства конфигурации > Компоновщик > Общие > Дополнительные каталоги библиотек.

Файл таблицы импорта (.lib)

Помимо указания IDE директории расположения файлов таблиц импорта (.lib), их также для линковки надо дополнительно явно указать. Сделать это можно двумя способами:

      Прописать полные названия (путь, название и расширение) .lib файлов сюда: Главное меню > Проект > Свойства проекта > Свойства конфигурации > Компоновщик > Ввод > Дополнительные зависимости. Каждая библиотека в отдельной строке. Кавычки необязательны.
      В итоге они будут вписаны автоматически в строку в двойных кавычках через точку с запятой (;). E.g.:

    1. Указать каждый .lib файл эдиножды, желательно в главном/первом файле программы, с помощью директивы препроцессора #pragma . E.g.:

    Можно использовать сразу два способа.

    Я рекомендую использовать второй вариант, когда все подключения пишутся непосредственно в коде. Так нагляднее и переносимость кода увеличивается, когда всё, что нужно написано в самом коде, а не где-то там в настройках IDE.

    Файлы библиотек (.dll)

    Файлы динамических библиотек (.dll), обычно, находятся в папке «bin» в любой библиотеке.
    Путь к файлам динамических библиотек .dll нигде не укажешь. Файлы .dll надо класть в соответсвующие папки IDE или ОС, но легче и лучше всего положить в папку с самим исполняемым файлом программы/приложения.

    Параметры конфигурации препроцессора

    Также не забывайте указывать параметры конфигурации препроцессора тут: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Препроцессор > Определения препроцессора. Параметры являются комбинированием в определённой последовательности определённых литералов. Вот некоторые из них:

    • Static — статичесий (для статических библиотек — .lib в Win),
    • Dynamic — динамический (для динамических библиотек — .dll в Win),
    • Release — релизная версия сборки,
    • Debug — отладочная версия сборки,
    • MT — многопоточная, MT от слов multi thread
    • MTd — multi thread, debug
    • MD — многопоточный динамический (DLL)

    Некоторые возможные варианты параметров:

    • MT_StaticRelease
    • MTd_StaticDebug
    • MD_DynamicRelease

    Это далеко не все возможные параметры.

    Эти параметры конфигурации препроцессора должны быть обязательно одинаковыми у всех используемых в проекте библиотек, иначе будет ошибка «Error LNK2038: несоответствие значений параметров конфигурации препроцессора» в объектных (.obj) файлах.

    Примечания

    Пути директории указывать без конечного слеша.

    Опция Компоновщик

    Когда проект представляет собой библиотеку, а не исполняемый файл, то опции Компоновщик нет. Это не потому, что для проектов типа «библиотека» указывать директории подключения др. библиотек не нужно и нельзя. Несмотря на то, что опции Компоновщик нет, директории библиотек указываются не только для проектов исполняемых файлов, а также и для библиотек. В этом случае вместо Компоновщика имеется опция Библиотекарь с примерно таким же функционалом.

    Библиотеки

    При запуске библиотек (файлы .dll и .lib) всегда будет выскакивать окно «с ошибкой» о том, что нельзя запустить этот файл и далее следует его точный путь. Это нормально т.к. библиотеки не запускаются в отличие от исполняемых файлов (.exe).

    Заключение

    На самом деле, подключать сразу столько всего зачастую не нужно. Как правило, предоставляется только исходный код и всё. Приходится самостоятельно из исходников компилировать библиотеки (файлы .dll и .lib). Т.е. нужно будет указать только заголовочные файлы .h, которые являются частью исходников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *