Я считаю полезным понять базовые инструменты.Это cl.exe (компилятор) и link.exe (компоновщик).Вам нужно сообщить компилятору сигнатуры функций, которые вы хотите вызвать в динамической библиотеке (включая заголовок библиотеки), и вам нужно сообщить компоновщику, как называется библиотека и как ее вызывать (включая «implib»)или импортировать библиотеку).
Это примерно тот же процесс, который gcc использует для ссылки на динамические библиотеки в * nix, отличается только объектный файл библиотеки.
Знание базовых инструментов означает, что вы можете быстреенайти соответствующие настройки в IDE и проверить правильность сгенерированных командных строк.
Пример
Скажем, A.exe зависит от B.dll.Вам нужно включить заголовок B в A.cpp (#include "B.h"
), затем скомпилировать и связать с B.lib:
cl A.cpp /c /EHsc
link A.obj B.lib
Первая строка генерирует A.obj, вторая - A.exe.Флаг /c
указывает cl не связывать, а /EHsc
указывает, какой тип исключения C ++, обрабатывающего двоичный файл, должен использовать (нет значения по умолчанию, поэтому вы должны что-то указывать)./c
cl позвонит вам link
.Вы можете использовать флаг /link
, чтобы указать дополнительные аргументы для link
и сделать все сразу, если хотите:
cl A.cpp /EHsc /link B.lib
Если B.lib не находится на пути INCLUDE
, вы можете указатьотносительный или абсолютный путь к нему или добавьте его родительский каталог в ваш путь включения с флагом /I
.
Если вы звоните из cygwin (как я), замените прямую косую черту тире.*
Если вы пишете #pragma comment(lib, "B.lib")
в A.cpp, вы просто указываете компилятору оставить комментарий в A.obj, сообщая компоновщику ссылку на B.lib.Это эквивалентно указанию B.lib в командной строке ссылки.