Visual Studio 2013 выдает исключение в ntdll.dll при использовании библиотеки GLEW

Я пишу кроссплатформенный 3D-движок с использованием OpenGL. Раньше я использовал OpenGL 1 с некоторыми расширениями, и он хорошо работал на Windows/Mac/Linux. Но теперь я решил использовать версию OpenGL 3.3. Переход на OpenGL 3.3 привел к сбою моего приложения при запуске.

Проблема в том, что когда я выбираю цель сборки Win32, VS использует библиотеки из папки C:/Windows/SysWOW64, которые являются 64-битными библиотеками. И когда я выбираю цель сборки x64, VS использует библиотеки из C:/Windows/System32.

Я использую Visual Studio 2013 на Windows 8.1 x64.

Так это ошибка Visual Studio, и я должен переключиться на другую IDE для сборки Windows, или я делаю что-то не так с конфигурацией проекта Visual Studio OpenGL?


person Andrey Bogdanov    schedule 22.01.2015    source источник


Ответы (1)


Проблема в том, что когда я выбираю цель сборки Win32, VS использует библиотеки из папки C:/Windows/SysWOW64, которые являются 64-битными библиотеками.

Неа. SysWOW64 содержит 32-битные библиотеки.

И когда я выбираю цель сборки x64, VS использует библиотеки из C:/Windows/System32.

Да, потому что 64-битные библиотеки находятся в System32.

Прежде чем вы спросите: «Подождите, что?! Какими наркотиками опьянили разработчиков Windows?» позвольте мне сказать вам, что у этого есть свои вполне обоснованные причины. Проблема в том, что во многих программах где-то жестко запрограммирован путь System32. И когда эти программы перекомпилируются для 64-битной версии, эти жестко запрограммированные пути остаются, и даже если они 64-битные, они ищут библиотеки в папке System32. Это также причина, по которой DLL интерфейса OpenGL называется opengl32.dll также в 64-битных системах.

При запуске 32-битных приложений разрешение имени файловой системы прозрачно заменяет пути для разрешения в каталог SysWOW64.


Итак, в заголовке вашего вопроса вы спросили о сбое в ntdll.dll. Что об этом?

person datenwolf    schedule 22.01.2015