Виджет OpenGL работает в редакторе, но черный при запуске из .exe

Я немного работаю над проектом Qt OpenGL для школьной работы. Мне пришлось пересобрать Qt 5.0.1 для моей машины с Windows, чтобы я мог правильно использовать OpenGL. В конце этого проекта мне нужно перевернуть файлы и все исполняемые файлы, поэтому я решил взять релиз .exe и вставить его в .zip для использования.

Я следовал инструкциям в Интернете, чтобы убедиться, что я помещаю все необходимые .dll в каталог .exe. Для моего проекта их 10: icudt49, icuin49, icuuc49, libEGL, libGLESv2, Qt5Core, Qt5Gui, Qt5OpenGL и Qt5Widgets.

Все эти файлы я взял из: C:\Qt\Qt5.0.1\5.0.1\msvc2010\bin

в моей системе.

Проблема в том, что .exe запустится, и я получу пользовательский интерфейс и все такое. Но сцена OpenGL просто черная. Я все еще могу щелкать объекты в сцене, очевидно, увеличивать и уменьшать масштаб и все такое. Я предполагаю, что Qt все еще переводит команды. Но ничего не видно. Я не уверен, в чем может быть проблема, потому что все отлично работает при запуске из создателя.

РЕДАКТИРОВАТЬ: Таким образом, с всеми dll в папке выпуска, запуск проекта из создателя также будет иметь черный экран, когда я их удаляю, он работает хорошо. Так что, возможно, одна из dll просто неверна?

Кроме того: я посмотрел в Интернете о публикации с помощью Qt Creator и нашел не слишком много помощи, сказал, что я должен начать с полной статической перестройки Qt Creator, но я уверен, что руководство, которому я следовал, сделал это, однако я все еще не могу публиковать из меню сборки, поэтому я остановился на вышеописанном методе.


person Poken1151    schedule 25.04.2013    source источник
comment
Вам нужен какой-либо файл для загрузки сцены?   -  person Ian Medeiros    schedule 25.04.2013
comment
Мне не ясен вопрос. Я не использую никаких внешних библиотек или файлов конфигурации. Все, что предоставляет Qt. В моем файле .pro у меня есть только виджеты QT += core gui opengl, поэтому я включил эти .dll. Что-то еще, что я могу упустить?   -  person Poken1151    schedule 25.04.2013
comment
Я просил какой-то файл .txt или что-то в этом роде. Если нет, попробуйте использовать зависимостей, чтобы найти недостающие зависимости? dependencywalker.com   -  person Ian Medeiros    schedule 25.04.2013
comment
Ну, я получил и попробовал инструмент, единственное, что действительно происходит, это выплевывает эту ошибку; По крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в неявно зависимом модуле. Но я понятия не имею, имеет ли это какое-либо отношение к программе. Я заметил, что не вижу libEGL.dll в его списке (но я вижу все остальные dll, которые я переместил). но пока это меня ни к чему не привело.   -  person Poken1151    schedule 25.04.2013
comment
Ну я перепроверил dll и они загрузились, только не те. Теперь приложение будет запускаться на машине с установленным QT, но не на другой машине без QT.   -  person Poken1151    schedule 25.04.2013
comment
Вот почему я рекомендовал dependencywalker. Вероятно, вы загружали другую версию QT из программы, установленной на вашем ПК. Имеет ли это смысл?   -  person Ian Medeiros    schedule 26.04.2013
comment
Да, я загружал разные .dll, и это сработало, я напишу ответ на это ниже.   -  person Poken1151    schedule 26.04.2013


Ответы (2)


Я предлагаю открыть все DDL в Zip-файле с помощью Dependency Walker (http://www.dependencywalker.com). /). Он должен отображать информацию о зависимостях одного из ваших файлов QtXXX.dll от других файлов. Если одна из зависимостей отсутствует, вы знаете, где искать дальше. Вы также можете попробовать открыть исполняемый файл с помощью Dependency Walker. Я не использовал программу в течение длительного времени, поэтому я не помню, является ли открытие исполняемого файла единственным способом ее работы. В любом случае, вот причины, по которым вам может понадобиться этот инструмент: http://www.dependencywalker.com/help/html/overview_1.htm

Этот вопрос также может быть полезен:

По крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в неявно зависимом модуле

Удачи!

person Konrad Kleine    schedule 26.04.2013

Таким образом, конечной проблемой было использование правильных библиотек DLL. Использование чего-то вроде DependenyWalker может помочь вам заметить, какие библиотеки DLL могут отсутствовать, однако в моем случае это ничего не дало.

Я установил Qt один раз, а также пересобрал, удалил и переустановил его. Однако все библиотеки, из которых он вызывался, больше не находились в C:\Qt\Qt5.0.1\5.0.1\msvc2010\bin, как и ожидалось, он вызывался из репозитория github, где я его построил C:\Users\User\Documents \Гитхаб\qt5. После того, как с этим разобрались, ему по-прежнему требуется папка фреймворка, и тогда он работает, как и ожидалось.

1) Скопируйте правильные файлы DLL в папку выпуска сборки.

2) Создайте папку в том же каталоге, что и .exe, с именем «платформы». (Примечание: в другом месте сказано создание плагинов > платформы, но это не будет работать с более новыми версиями Qt)

3) Из того же источника, что и другие библиотеки DLL, скопируйте qwindows.dll в созданную вами папку платформы.

4) Запускаем исполняемый файл и наслаждаемся.

Пока система, на которой вы работаете, поддерживает вашу структуру OpenGL, все должно быть в порядке.

person Poken1151    schedule 26.04.2013