QT Ошибка создания точки входа DLL
Я создал приложение в Qt Creator, которое выполняет некоторую обработку изображений с помощью CImg. Он работает нормально, когда я запускаю его из внутренней среды IDE, но если я попытаюсь запустить его из его каталога, он выдает следующую ошибку.
The procedure entry point [email protected]@[email protected]$$QAV0AAZ could not be located
in the dynamic link library QtCore4.dll
Все указывает на то, что установлена несколько версий DLL. Я обнаружил, что моя Xilinx IDE использует библиотеки Qt, но соответствующие DLL файлы имеют одинаковую версию. Я на самом деле не специалист по программному обеспечению, и в затруднительном положении.
Ответы
Ответ 1
Даже если версия библиотеки одинакова, они могут быть несовместимыми. Например, они были скомпилированы с различными конфигурациями, например, с поддержкой STL или без нее, OpenGL, SQL-драйверами...
Самый простой способ исправить это должен состоять в перемещении пути Qt SDK в начале переменной среды PATH
. Таким образом, всякий раз, когда вы запускаете исполняемый файл, который требует библиотеки Qt, он загружает те, которые поставляются с SDK (первые из них найдены в PATH
), если в исполняемом каталоге уже нет экземпляров QtCore4.dll, QtGui4.dll..., По этой причине, если вы перераспределяете свое приложение, вам также может потребоваться отправка библиотек в его каталог.
Другим вариантом является статическая привязка, но вам потребуется предоставить исходный код под лицензией (L) GPL.
Ответ 2
Используйте DependencyWalker для списка, из которого загружается qtcore4.dll.
У меня была та же проблема - DependencyWalker показал мне, что qtcore4.dll был загружен из c:\windows\system32 - но в этой папке не было qtcore4.dll.
Остерегайтесь: в Windows 7 64 бит c:\windows\SysWOW64 "отображается" как c:\windows\system32.
И в этой папке я нашел dll - я переименовал dll, и проблема была решена.
Смотрите этот ответ здесь:
Новое приложение Qt для Gui при запуске, ошибка в QtCore4.dll
Ответ 3
Статическая связь библиотек устраняет проблему.