Страницы

Поиск по вопросам

пятница, 2 ноября 2018 г.

Почему требуется QtCore.dll если уже есть QtCore.lib?

В проекте С++ (который компилируется в динамическую библиотеку) используется библиотека Qt, поэтому в Linker->Input добавлена статическая библиотека QtCore4.lib; почему во время использования проектной dll требуется также QtCore4.dll?


Ответ

Проблема состоит в том, что файл с расширением lib совершенно не обязан содержать статическую библиотеку. Если кратко, то этот файл содержит внешние по отношению к программе символы и инструкции как с этими символами поступать. Это может быть инструкция о связи с динамически компонуемой библиотекой (DLL) или же инструкция вставки готового откомпилированного кода, содержащегося в lib-файле. Qt стандартно распространяется в shared-версии, т.е. откомпилированные программы требуют её DLL, поэтому почти все её lib-файлы - это просто инструкции связи с DLL. Тем самым QtCore4.lib просто даёт компоновщику информацию о том, что все перечисленные в ней символы нужно брать из QtCore4.dll
Чтобы избавиться от зависимостей, Qt нужно пересобирать статически.

Комментариев нет:

Отправить комментарий