Daniro_San
@Daniro_San
Программист

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

При использовании динамической библиотеки в Visual C++ проекте, нужно добавлять файл *.lib. Как без него обойтись?

Пример как я делаю с TDM-GCC:
Создаётся динамическая библиотека - на выходе получаем *.dll.
Создается проект её использующий, в настройках линковщика добавляется относительный путь к *.dll библиотеке, также сама библиотека ложится в папку с проектом, что бы
линковщик мог её подцепить и взять адреса функций.
В папку к получившемуся экзешнику по относительному ложится *.dll библиотека , всё работает.

Пример как я делаю с VS:
Создаётся динамическая библиотека - на выходе получаем файл *.lib и собственно *.dll
Создается проект её использующий, в настройках линковщика добавляется относительный путь к *.lib файлу библиотеки.
В папку к получившемуся экзешнику ложится *.dll библиотека , всё работает.

Вот, зачем нужен *.lib ? Как обойтись без него?
  • Вопрос задан
  • 1143 просмотра
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Задача lib — указать если не код функций, то хотя бы каким образом их прилинковывать из DLL. В частности, как «искозявлено» имя функции при переводе с Си на Си++. Этот самый lib — издержка разделения функций между компилятором и линкером.
Не знаю, как MSVS/cl, но MinGW/ld с определённого момента начал прилинковывать DLL просто по наличию этого DLL, без построения *.a (а Embarcadero/ilink32, насколько мне известно, умел это изначально). С одной стороны, это серьёзно упрощает жизнь. С другой — для некоторых хитрых способов преобразования имён (или даже без имён, как в небезызвестном storm.dll) он не выцепит, что с чем слинковывать, *.a всё равно потребуется.
stackoverflow.com/questions/31708832/how-to-refere...
www.codeproject.com/Questions/613668/Is-it-possibl...
Простейший, действующий на любом компиляторе способ — это сделать DLL-заглушку со всеми нужными нам функциями в нужных нам соглашениях вызова и с нужным образом закозявленными именами. Код может быть любым, хоть пустым. Компилируем, подставляем этот lib и правильный DLL.
Второй способ — получить список имён функций, собрать их в *.def с правильными соответствиями «имя в коде — имя в DLL» и сделать из этого *.lib. Какими программами это делается в MSVS — описано по одной из ссылок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы