2015-01-22 3 views
0

OpenGL을 사용하여 크로스 플랫폼 3D 엔진을 작성하고 있습니다. 과거에는 OpenGL 1을 약간의 확장과 함께 사용했으며 Windows/Mac/Linux에서 잘 작동했습니다. 하지만 이제는 OpenGL 3.3 버전을 사용하기로 결정했습니다. OpenGL 3.3으로 전환하면 시작시 응용 프로그램이 실패하게됩니다.GLEW 라이브러리를 사용할 때 Visual Studio 2013에서 ntdll.dll에서 예외가 throw됩니다.

문제는 Win32 빌드 대상을 선택할 때 VS가 64 비트 라이브러리 인 C :/Windows/SysWOW64 폴더의 라이브러리를 사용한다는 것입니다. 그리고 x64 빌드 대상을 선택할 때 VS는 C :/Windows/System32의 라이브러리를 사용합니다.

Windows 8.1 x64에서 Visual Studio 2013을 사용합니다.

Visual Studio 버그가있어서 Windows 빌드를 위해 다른 IDE로 전환해야합니까? 아니면 Visual Studio OpenGL 프로젝트 구성에 문제가 있습니까?

답변

0

문제는 Win32 빌드 대상을 선택할 때 VS가 64 비트 라이브러리 인 C :/Windows/SysWOW64 폴더의 라이브러리를 사용한다는 것입니다.

아니요. SysWOW64에는 32 비트 라이브러리가 들어 있습니다.

x64 빌드 대상을 선택할 때 VS는 C :/Windows/System32의 라이브러리를 사용합니다.

예, 64 비트 라이브러리가 System32에 있기 때문에 가능합니다.

"잠깐, 뭐라구?"Windows 개발자들이 마약에 취한 약물에는 어떤 것이 있습니까? 이것이 아주 잘 설립 된 이유가 있음을 알려 드리겠습니다. 문제는 많은 프로그램이 System32 경로를 어딘가에 하드 코딩했기 때문입니다. 그리고 이러한 프로그램이 64 비트 용으로 다시 컴파일되면 하드 코드 된 경로가 그대로 유지되고 64 비트이지만 System32 위치에서 라이브러리를 찾습니다. 이것이 OpenGL 인터페이스 DLL의 이름이 opengl32.dll 인 이유이기도합니다.

32 비트 응용 프로그램을 실행할 때 파일 시스템 이름 확인은 해결할 경로를 SysWOW64 디렉토리로 투명하게 대체합니다.


그래서 질문 제목에서 ntdll.dll의 충돌에 대해 질문했습니다. 그게 뭐야?

관련 문제