2013-05-29 4 views
3

저는이 사이트가 새롭고 프로그래밍이 새로운 편입니다. 저는 Visual Studio 2010을 사용하여 잠시 동안 C++ 프로그래밍을 해오 고 OpenGL에 들어가기를 원했기 때문에 OpenGL Superbible을 구입했습니다. 나는 두 번째 장의 "단순한"프로젝트에 매달렸다. 몇 시간의 연구 끝에 freeGLUT과 GLtools를 사용하기 위해 필요한 모든 파일을 다운로드 할 수있었습니다. 나는 프로그램이 제대로 작동 할 수 있도록 모든 것이 올바른지 확인했습니다. 이제 이상한 문제 하나만 제외하고 모든 것이 해결되었습니다.컴파일 된 프로그램을 찾을 수 없습니다. freeglut.dll

나는 Windows/System32에 freeglut.dll을 배치해야한다고 지시 받았다. 이 프로젝트는 현재 구축 할 것입니다,하지만 난 그것을 실행에 갈 때, 그것은 나에게

을 알려줍니다 "freeglut.dll 컴퓨터에서 누락되기 때문에 프로그램을 시작할 수 없습니다.이 문제를 해결하려면 프로그램을 다시 설치 을보십시오. "

이제 freeglut.dll이 Windows \ System32에 있어야하므로 문제가 무엇입니까? 어떻게 해결합니까?

다음은이 책에서 원래의 코드입니다 :

#include "../../shared/gltools.h" //OpenGL toolkit 

////////////////////////////////////////////// 
//called to draw scene 

void RenderScene(void) 
{ 
    // clear the window with current clearing color 
    glClear(GL_COLOR_BUFFER_BIT); 

//Flush drawing commands 
    glFlush(); 
} 
//////////////////////////////////////////////////////// 
//set up the rendering state 
void SetupRC(void) 
{ 
    glClearColor(0.0f , 0.0f, 1.0f, 1.0f); 
} 
/////////////////////////////////////////////////////////// 
//main program entry point 
void main(void) 
int main(int argc, char* argv[]) 
    { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 
    glutCreateWindow("Simple"); 
    glutDisplayFunc(RenderScene); 

    SetupRC(); 
    glutMainLoop(); 
    return 0; 
    } 

이 실제로 컴파일 된 코드는하지만, (그것은 내가 다른 자원에서 얻은 모든 충돌 데이터로부터 엉망 약간의) 실행되지 않을 것입니다 :

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
#include <GLTools.h> 
#include <gl/GLUT.h> 
//called to draw scene 

void RenderScene(void) 
{ 
// clear the window with current clearing color 
glClear(GL_COLOR_BUFFER_BIT); 

glFlush(); 
} 

//set up the rendering state 
void SetupRC(void) 
{ 
glClearColor(0.0f , 0.0f, 1.0f, 1.0f); 
} 

//void main(void) 
int main(int argc, char* argv[]) 
{ 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 
glutCreateWindow("Simple"); 
glutDisplayFunc(RenderScene); 

SetupRC(); 
glutMainLoop(); 
return 0; 
} 
+2

exe와 동일한 폴더에 dll을 배치하여 전혀 작동하는지 확인하려고 했습니까? –

+0

나는 지금있다. 감사. – DJDragon430

답변

8

exe ​​파일과 같은 폴더에 DLL을 넣으십시오. Windows \ System32에 넣으라는 조언은 새로운 Windows 보안 제한보다 훨씬 앞선 것입니다.

+0

감사! 이제 완벽하게 작동합니다. – DJDragon430

9

@ ScottMcP-MVP의 대답으로 내 문제가 해결되었지만 의견에 맞지 않는 세부 사항을 추가 할 것이라고 생각했습니다.

내 솔루션 :

  1. 는 솔루션 폴더에 다음과 같은 하위 디렉토리 구조를 추가 x86에서

enter image description here

는, 과잉, GLew 및 다른 어떤의 32 비트 버전을 넣어 너는 필요해.

x64에는 동일한 64 비트 버전을 넣으십시오.

나는 SVN에서 내 프로젝트를 가지고 있는지 확인 (Win7에 +는 "윈도우 키트"폴더에, 또는) 나서서 윈도우 SDK에 배치보다 여기가 아니라 해당 폴더에있는 모든 .dll, .lib.h를 넣어 올바른 버전 및 다른 컴퓨터에서 체크 아웃하면 모든 종속성을 검색합니다.

enter image description here

$(SolutionDir)ThirdParty\Include\;$(IncludePath)

그리고 당신의 Library Directories 필드에 Include Directories 필드를 설정

$(SolutionDir)\ThirdParty\$(PlatformTarget)\lib\;$(LibraryPath)

에 :이 프로젝트 속성에 include 및 대상별 lib 폴더를 추가 필요

이들 모두는 "모든 플랫폼"빌드 구성에 적용되어야합니다. $(PlatformTarget) 매크로는 올바른 lib 및 dll이 사용되는지 확인합니다. include 폴더는 대상에 영향을받지 않기 때문에 내 ThirdParty 폴더의 루트에 배치했습니다.

은 출력 폴더에 필요한 파일을 가져 오려면 ("모든 플랫폼"에서) 프로젝트 구성에 다음과 같은 빌드 후 이벤트를 추가 :

xcopy $(SolutionDir)ThirdParty\$(PlatformTarget)\*.dll $(OutputPath) /Y

enter image description here

복사합니다 그 빌드시 출력 폴더에 대한 DLL의 올바른 버전. 이렇게하면 DLL을 수동으로 출력 폴더에 넣지 않아도되며 일반적으로 출력, bin 또는 디버그 폴더를 포함하지 않으려는 소스 제어와 더 잘 호환됩니다.

이 모든 것을 구성하고 나면 VC OpenGL 프로젝트 템플릿을 만들었습니다. 모든 구성을 완료하는 데 30 분이 걸렸기 때문에 차라리 돌아갈 것입니다.

+0

당신은이 대답에 대해 거의 충분히 인식하지 못했습니다. 당신에게 명성. – Herbstein

+0

솔루션을 제공해 주셔서 감사합니다. 해결책을 찾기 위해 약 1 시간을 소비 한 다음 VS2017에서 완벽하게 작동합니다. – user1684343

+0

@ user1684343 여러분의 반응은 가치가 있습니다. 다행히 도울 수있어. –

관련 문제