Ответ 1
Он не статически связан..lib - это только заглушка, которая связывается в .dll в окнах. То есть вы связываетесь с .lib во время компиляции, а затем во время выполнения он будет искать .dll.
Есть вещи, которые я не понимаю, когда дело доходит до ссылки... Я пишу программу, используя стороннюю библиотеку (библиотека GEOS). Эта программа имеет зависимость от geos.lib, но для ее работы все еще требуется файл geos.dll.
Я читаю этот вопрос, я думаю, что понимаю разницу между статическими и динамическими библиотеками. Я не понимаю, почему мне все еще нужна DLL, когда я статически свяжу библиотеку.
Он не статически связан..lib - это только заглушка, которая связывается в .dll в окнах. То есть вы связываетесь с .lib во время компиляции, а затем во время выполнения он будет искать .dll.
В Windows существует 3 типа библиотек:
библиотеки объектов статически связаны. Они содержат полные определения объектов кода, абстрагированные библиотекой.
Библиотеки импортапредставляют собой особую форму библиотеки объектов. Вместо того, чтобы содержать код, они содержат информацию для компоновщика, которая в конечном итоге отображает исполняемый файл в библиотеку динамической компоновки.
библиотеки динамических ссылок, такие как библиотеки объектов, код поставки для вашей программы. Однако этот код загружается во время выполнения и не компилируется в ваш exe.
Вам не всегда нужно связывать библиотеку импорта. Вместо этого вы можете вызвать LoadLibrary() и искать точки входа API по имени или порядку. (Вы всегда должны указывать код DLL и где в этом DLL API вы хотите ввести.)
Другие комментарии здесь верны в том, что вы не можете сделать DLL в статическую lib без перекомпиляции кода для libary - это другой вид вывода.
Если .Lib был создан Visual Studio, тогда проверьте значение свойств Project → Linker → Input → File Definition File. Если он не пуст, тогда link.exe создает библиотеку stub вместо статической библиотеки, даже если свойства проекта → Общие → Тип конфигурации - "Статическая библиотека (.lib)".
Вы определенно связываетесь с динамической библиотекой. Просто потому, что компоновщик требует .lib файл, не означает, что вы привязываетесь к статической библиотеке.
Вы можете статически связывать файл lib тогда и только тогда, когда это статический файл lib. Поэтому сначала вам нужно преобразовать проект dll в статическую библиотеку lib, создать ее и после этого использовать продукт вашей сборки, который будет статическим .lib файлом.