Как добавить ссылку в С++
Я новичок в С++ и там что-то, чего я просто полностью не получаю. В С#, если я хочу использовать внешнюю библиотеку, например log4net, я просто добавляю ссылку на DLL log4net, и ее члены автоматически доступны мне (и в IntelliSense). Как это сделать в неуправляемом С++?
Ответы
Ответ 1
Часто библиотека содержит 1) файл заголовка (.h) и 2).lib файл в дополнение к DLL.
В вашем коде заголовочный файл содержит # include, чтобы предоставить вам доступ к объявлениям типов и функций в библиотеке.
.lib связан с вашим приложением (свойства проекта → компоновщик → ввод, дополнительные зависимости).
Файл .lib обычно содержит простые заглушки, которые автоматически загружают DLL и пересылают вызовы функций.
Если у вас нет .lib файла, вам придется использовать функцию LoadLibrary для динамической загрузки DLL.
Ответ 2
Основная концепция заключается в следующем:
Существует 2 типа библиотек: статические и динамические. Разница между ними заключается в том, что статические библиотеки во время этапа сборки связывания вставляют свой скомпилированный код в ваш исполняемый файл (или dll); динамические библиотеки просто вставляют указатели на функции и инструкцию о загрузке некоторой DLL, когда программа загружается. Это реализуется для вас компоновщиком.
Теперь вы можете решить, какой из этих двух вы собираетесь использовать. DLL имеют много преимуществ и недостатков. Если вы разрабатываете огромное приложение, возможно, стоит рассмотреть возможность использования DLL с задержкой загрузки вместо статических библиотек. Некоторые библиотеки просто доставляются вам как библиотеки DLL, и у вас нет выбора. В любом случае самым простым способом для новичков было бы использование статических библиотек. Это облегчит вам развертывание и тестирование, поскольку при работе с DLL вы должны убедиться, что они найдены во время выполнения (даже при использовании отладчика), это включает в себя либо копирование всего в одном каталоге, либо использование переменных пути.
Обычно поставщик DLL (если он предназначен для работы с библиотекой) предоставляет вам файлы заголовков и .lib, который содержит вызовы в нужную DLL. Некоторые поставщики (например, boost) требуют, чтобы вы включили заголовочный файл, а lib автоматически связан с вашим исполняемым файлом (может быть достигнуто с помощью предпродажной директивы pragma компилятора). Если это не так, вы должны войти в настройки проекта проекта С++ (свойства проекта/Свойства конфигурации /Linker/Input ) и ввести имя файла lib в строку "Дополнительные зависимости", например. iced.lib iceutild.lib
. Вы также можете указать здесь полные имена путей. Имейте в виду, что вам нужно ввести имена файлов lib для обеих конфигураций (Debug, Release). Это процедура, которую вы выполняете со статическими библиотеками и Dll одинаково. Единственное отличие, что DLL потребует, чтобы библиотека DLL была либо в вашем каталоге приложений, либо в одном из каталогов путей.
После этого вы все равно можете получить ошибки компилятора, если попытаетесь связать несовместимые библиотеки. Есть много причин, почему они могут быть несовместимыми. Но попробуйте сначала связать lib таким образом и посмотреть, работает ли. Если нет, опубликуйте свои ошибки здесь;)
Включаемые файлы используются для включения в места, где вы хотели бы использовать smth. из библиотеки. Просто включите его, и компилятор будет знать, что символы должны поступать либо из другого (скомпилированного) модуля компиляции (скомпилированного cpp-file = > object file), либо из .lib. Он заставит вас искать и уведомлять вас, если требуемые символы не найдены.
Удачи,
Ованес
P.S. Это может быть трудно в начале, но когда вы привыкнете к нему, это будет легко.
Ответ 3
С++ не имеет библиотек в том смысле, о котором вы думаете. У него есть файлы заголовков, которые вы #include
, и у него есть вещи, называемые библиотеками, с которыми связан компоновщик, которые содержат скомпилированный код. Вам нужно добавить библиотеки (файлы .LIB) в настройки компоновщика.
В Windows, если вы используете DLL, в идеале у вас должен быть файл .LIB, который будет использоваться с ним, который называется Библиотекой импорта для DLL, и вы добавляете этот .LIB файл в настройки компоновщика.
Ответ 4
Первое, что вам нужно сделать, - это включить # заголовочный файл, описывающий функции, доступные в этой библиотеке.
Фактический код библиотеки будет в одном из двух мест:
- Статическая библиотека (.lib)
- dll (.dll)
В зависимости от того, как вам предоставляется код библиотеки (как .lib файлы или как .dll), вам нужно либо:
- #pragma comment (lib, "libraryname.lib" ), если его .lib
- LoadLibrary, если его .dll
Иногда пакет поставляется с BOTH файлом .lib, с которым вам нужно установить ссылку, и DLL файл. В этом случае вам не нужно вызывать LoadLibrary, вам нужно только #pragma comment (lib, "libaryfile.lib" ), потому что в этом случае .lib связывает вас с DLL.
Очень важная деталь - разместить DLL, где ваше приложение может ее найти. Чарльз Петцольд говорит:
Когда Windows необходимо загрузить DLL-модуль перед запуском требуемой программы, файл библиотеки должен быть сохранен в каталоге, содержащем программу .EXE, текущий каталог, системный каталог Windows, каталог Windows или каталог, доступный через PATH в среде MS-DOS. (Поиск каталогов осуществляется в этом порядке.)
Программирование окон, 5-е издание
MSDN
Я не рекомендую использовать меню свойств проекта для ссылки, потому что это не так заметно, к каким библиотекам вы привязываетесь.
См. также