Как развернуть приложение VS, C ++, OpenGL на втором компьютере? - PullRequest
3 голосов
/ 05 октября 2019

Я пытаюсь просто развернуть приложение OpenGL, C ++ с одного компьютера на другой. Приложение было написано с использованием сообщества Visual Studio 2017. На первом компьютере установлена ​​VS, на втором нет.

На компьютерах установлены процессоры Intel Core i7-8550U и Intel Atom x5-Z8350 соответственно. Оба работают под управлением Windows 10 Home.

Проект VS был запущен как пустой проект, в который я добавил все.

Я скопировал выпуск, файл приложения x64 .exe и один файл DLL. необходимо для разработки проекта в один каталог на втором компьютере.

Инструкции Microsoft для локального развертывания говорят «Локальное развертывание, в котором вы копируете определенные библиотеки DLL Visual C ++ из вашей установки Visual Studio -обычно в \ Program Files (x86) \ Microsoft Visual Studio version \ VC \ Redist \ platform \ library \ - и устанавливайте их на целевые компьютеры в той же папке, что и исполняемый файл приложения. Вы можете использовать этот метод развертывания, чтобы разрешить установку пользователям, у которых нет прав администратора, или для приложений, которые можно запускать из общей сетевой папки. ”

Ничто из того, что я могу увидеть или найти для установки в VS, не говорит мнекакие файлы .dll используются разработанным мною приложением и запускаются на первом компьютере. Есть окно вывода VS, в котором отображается ряд файлов .dll, но они находятся в каталоге c: \ windows \ system32.

Из ссылки в инструкциях Microsoft относительно библиотек MSVC в \ Program Files (x86)\ Microsoft Visual Studio версия \ VC \ Redist \ platform \ library \, я посмотрел в .. \ VC \ Redist \ MSVC \ 14.16.27012 \ x64 на первом компьютере и нашел следующие папки:

enter image description here

Я скопировал библиотеки DLL из каталога .CRT и каталога .MFC на второй компьютер безрезультатно.

Когда я пытаюсь запустить приложение навторой компьютер отображает сообщение «Не удалось создать окно GLFW», которое находится в коде, который я написал, как показано здесь:

enter image description here

Казалось бы,должен быть прямой способ сделать это. Я видел ссылку на старое приложение Microsoft (я думаю), depen.exe, которое предоставляет список необходимых библиотек DLL, но оно больше не развернуто в системах Windows.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

отсутствует DLL или RTL

вызывает сбой или даже отсутствие ошибки, а просто мгновенное закрытие вашего приложения (именно это делает или пропускает или пропускает MSVCPP RTL в какой-то момент),

Поскольку библиотеки RTL постоянно меняются (IIRC раз в год), уже существует множество версий, так что удачи в использовании приложений MSVCPP на новых компьютерах с ОС. Чтобы использовать какое-то приложение, вам обычно нужно выяснить, какая версия RTL ему нужна, о которой они обычно не сообщают, так что в итоге вы установите все из них, что у вас есть в руках ...

СуществуетЧтобы обойти эту проблему, просто включите компилятор / компоновщик для связывания всего необходимого непосредственно в exe-файл вместо использования библиотек RTL. Однако я не пишу код в MSVCPP, и, как я слышал, MS удалила эту опцию из своей среды (у других используемых мной компиляторов она есть)

В вашем сообщении об ошибке указано, что ваше приложение работает должным образом и не пропалочто угодно.

Проблема на стороне GL . В Windows 10 обычно используются неправильные драйверы (и не только для карт GFX). В данном случае принудительно (скорее всего, преднамеренно) используются драйверы MS с ошибками (где GL содержит ошибки, а DX более или менее работает) вместо предоставленных поставщиком. Чтобы исправить это (проверьте производителя драйвера и, если нет, то как это должно быть) загрузите и установите правильный драйвер с вашего сайта поставщика gfx Не используйте службу драйверов Windows для карт gfx !!!

1 голос
/ 05 октября 2019

Вы можете использовать DUMPBIN / DEPENDENTS EXENAME, чтобы получить список связанных DLL. Напоминаем, что в этом списке перечислены только библиотеки DLL с записями таблицы импорта, если вы создаете экземпляры COM-объектов, это не поможет вообще.

Полагаю, вы, вероятно, упускаете драйвер / библиотека DLL opengl в целевой системе.

ed: на самом деле я собираюсь сузить это до отсутствия драйвера, так как если бы вы пропустили DLL, вы бы получили ошибку при загрузке. Тот факт, что вы можете вызывать функцию, означает, что вы привязаны к ней, но вы получаете сбои только тогда, когда она пытается вызвать драйвер. Попробуйте вызвать что-то мягкое, запрашивающее информацию о драйвере или устройстве, например, версию или строку. Если это не помогает, вы знаете, что драйвер отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...