Я сделал несколько игр с Visual C ++ 2015 и OpenGL. Когда я запускал его на своей машине, проблем не было, но когда я запускал его на других машинах, это показывает, что некоторые библиотеки DLL отсутствуют. Я хочу знать, как убедиться, что это не произойдет в следующий раз, и что я должен учитывать, чтобы избежать проблем с отсутствующими файлами?
c++
visual-studio
Анкит сингх кушва
источник
источник
Ответы:
Вам необходимо установить распространяемые файлы для версии Visual Studio, которую вы использовали, на любой компьютер, на котором нужно запустить исполняемые файлы, например, https://www.microsoft.com/en-us/download/details.aspx?id=48145 для VS2015. , Вам также может понадобиться переадресация для DirectX или других компонентов.
Установщики приложений, как правило, устанавливают все распространяемые файлы для любых своих зависимостей. Вы можете сделать такой установщик с помощью InnoSetup, NSIS, WIX или различных других инструментов.
Можно создавать исполняемые файлы, которые не нуждаются в каких-либо распространяемых файлах, но тогда вы ограничены подмножеством основных функциональных возможностей Windows, которых, как правило, недостаточно для создания какой-либо значимой игры или большого приложения. Сами установщики являются примером приложений, которые не нуждаются в каких-либо зависимостях для запуска.
источник
MSVCRT.DLL
(включена в саму Windows) вместоMSVCPxxx.DLL
(версии для конкретной версии, включенные в выпуски Visual Studio).Я использую Dependency Walker для отслеживания отсутствующих DLL:
В VS также есть опция времени компиляции для статической связи DLL:
источник
Для Visual C ++ у вас есть несколько вариантов обработки перераспределения: запустите EXE из вашего установщика (с правами администратора), используйте модуль слияния MSM с вашим установщиком MSI или даже параллельные библиотеки DLL. Смотрите MSDN для деталей.
Большая проблема - OpenGL. Единственная версия OpenGL, включенная в Windows, - это программный рендерер OpenGL 1.5. Все остальное требует установки стороннего ICD.
источник
Отказ от ответственности: это обходной путь , а не решение вашего ответа, но все же очень жизнеспособная возможность.
Если вы хотите быть абсолютно уверены, что нет никаких зависимостей от самой VS - но у нее есть свои недостатки - в настройках генерации кода вы можете выбрать Multi-Threaded (MT) / Multi-Threaded Debug (MD) (для отладочных сборок). ) вместо MT DLL (MTd) / MT Debug DLL (MDd).
Какие недостатки?
А какие плюсы?
Проверьте эту ссылку для более подробного объяснения и для ловушек и недостатков, с которыми вы можете столкнуться при использовании статической среды выполнения.
Другой обходной путь - поместить все необходимые библиотеки DLL туда, где находится ваш бинарный файл. Ваше приложение не получит выгоду от обновлений (для библиотек времени выполнения), но это все.
Реальным решением является распространение приложения в режиме dll выпуска / без отладки (MTd) и предоставление правильного распространяемого установщика VC ++ (и любых других установщиков библиотеки, которые вы можете использовать, например, OpenAL, DirectX9, PhysX), и позволить пользователю запустить перед запуском приложения (как указано в других ответах).
Также убедитесь, что пользователь знает, что ему / ей может понадобиться обновить драйверы графического процессора (поскольку они содержат несколько сред выполнения для многих приложений, например, OpenGL, Vulcan).
источник
Моим решением было скопировать и вставить DLL, которая вызвала ошибку, в папку, где находится файл .sln в visual studio. После
#include
раздела я написал#pragma comment (lib, "lost DLL name with .dll")
и решил это!Примечание. Я решил проблему, с которой столкнулся при работе со сторонней библиотекой (vulkan api) DLL. Может быть, это не известно, но 90% будут работать удачи :)
источник