Скомпилированный проект с файлами .lib, но когда я запускаю, Windows жалуется, что dll не найдена

У меня нет опыта работы с Windows, только Linux. Я пытаюсь скомпилировать проект как проект Visual Studio. Простое открытие проекта и сборка идет нормально, но когда я запускаю, Windows сообщает мне, что не может найти некоторые .dll, которые поставляются с проектом, но находятся за пределами папки проекта Visual Studio. Он также поставляется с файлами .lib с тем же именем.

Должен ли я связать эти файлы lib в процессе сборки? Думаю, нет, потому что, если бы я сделал это, он бы уже был включен в проект Visual Studio.

Могу я тогда их установить? Или я могу указать своему исполняемому файлу, где их найти при запуске?

Импортируйте библиотеку, используя #pragma comment(lib,"libname") где-нибудь в вашем источнике, затем вызовите функции, которые экспортируются в библиотеку. Если они находятся в dll, то связывание библиотеки загрузит dll автоматически, и вам все равно нужно будет вызывать экспортированные функции.   —  person Guerlando OCs    schedule 14.02.2020

@Nina Теперь, когда вы подали идею, я заметил, что действительно существует код, который импортирует эти .lib файлы: WPMainCore.lib, CTMedia.lib, CTStream.lib. Однако когда я запускаю исполняемый файл, я получаю сообщение об ошибке, в котором говорится, что, например, CTStream.DLL не может быть найден. Почему он использует .lib, но при беге жалуется на dll?   —  person Guerlando OCs    schedule 14.02.2020

stackoverflow.com/questions/1776060/   —  person Guerlando OCs    schedule 14.02.2020

@HansPassant, спасибо. Но если я строю с x.lib, почему Windows жалуется, что x.dll не может быть найден при запуске программы? Разве x.lib уже не следует что-то реализовывать?   —  person Guerlando OCs    schedule 14.02.2020

x.lib — это библиотека импорта для x.dll. Он просто перечисляет экспортируемые функции, он не содержит никакого кода. Код живет в dll.   —  person Guerlando OCs    schedule 14.02.2020

См. также:  Собственный образ Windows Graalvm без консоли

@HansPassant, прежде чем комментировать здесь, я искал dll vs lib, и они сказали, что это было похоже на .a и .so, но, видимо, это не так. Потому что, когда я связываю .a, мне не нужно указывать .so. Но разве в .h файле не должны быть перечислены экспортируемые функции? Зачем нужен .lib?   —  person Guerlando OCs    schedule 14.02.2020

@guerlando, если у вас есть доступ к CTStream.dll, просто поместите его в каталог исполняемого файла. Если вы сами компилируете CTStream и хотите связать только библиотеки и не нуждаетесь в DLL, скомпилируйте проект как / MT в настройках компоновщика VS. Я не уверен, откуда у вас файлы lib без dll   —  person Guerlando OCs    schedule 14.02.2020

Есть два типа файлов .lib. Статические библиотеки похожи на .a, они содержат код, а компоновщик связывает его с основным исполняемым файлом. Нет .dll не требуется. Но библиотека импорта — это просто список функций, которые экспортируются с помощью .dll. Компоновщику необходимо, чтобы он знал, где находится функция, и использует его для создания таблицы импорта в исполняемом файле. Это в первую очередь необходимо, потому что экспортируемая функция в .dll не обязательно должна иметь имя. То, что эти файлы имеют одинаковое расширение имени файла, было неудачным выбором.   —  person Guerlando OCs    schedule 14.02.2020

Предлагаю вам обратиться к документу: Пошаговое руководство: создание и использование собственной библиотеки динамической компоновки   —  person Guerlando OCs    schedule 14.02.2020

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: