Подтвердить что ты не робот

Программа, статически связанная с библиотекой, но все же нуждается в dll для запуска

Есть вещи, которые я не понимаю, когда дело доходит до ссылки... Я пишу программу, используя стороннюю библиотеку (библиотека GEOS). Эта программа имеет зависимость от geos.lib, но для ее работы все еще требуется файл geos.dll.

Я читаю этот вопрос, я думаю, что понимаю разницу между статическими и динамическими библиотеками. Я не понимаю, почему мне все еще нужна DLL, когда я статически свяжу библиотеку.

4b9b3361

Ответ 1

Он не статически связан..lib - это только заглушка, которая связывается в .dll в окнах. То есть вы связываетесь с .lib во время компиляции, а затем во время выполнения он будет искать .dll.

Ответ 2

В Windows существует 3 типа библиотек:

  • библиотека объектов (*.lib)
  • библиотека импорта (*.lib)
  • динамическая библиотека (*.dll)

библиотеки объектов статически связаны. Они содержат полные определения объектов кода, абстрагированные библиотекой.

Библиотеки импорта

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

библиотеки динамических ссылок, такие как библиотеки объектов, код поставки для вашей программы. Однако этот код загружается во время выполнения и не компилируется в ваш exe.

Вам не всегда нужно связывать библиотеку импорта. Вместо этого вы можете вызвать LoadLibrary() и искать точки входа API по имени или порядку. (Вы всегда должны указывать код DLL и где в этом DLL API вы хотите ввести.)

Другие комментарии здесь верны в том, что вы не можете сделать DLL в статическую lib без перекомпиляции кода для libary - это другой вид вывода.

Ответ 3

Если .Lib был создан Visual Studio, тогда проверьте значение свойств Project → Linker → Input → File Definition File. Если он не пуст, тогда link.exe создает библиотеку stub вместо статической библиотеки, даже если свойства проекта → Общие → Тип конфигурации - "Статическая библиотека (.lib)".

Ответ 4

Вы определенно связываетесь с динамической библиотекой. Просто потому, что компоновщик требует .lib файл, не означает, что вы привязываетесь к статической библиотеке.

Ответ 5

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