2017-09-26 1 views
0

저는 게임/시뮬레이터를 C++ OpenGL freeglut에서 만들 때 사용할 정적 라이브러리를 만들고 있습니다. 이 라이브러리를 GLUtils라고 부릅니다. 그것은 void GL::drawShape(Vector *points, Color *colors, int size)과 같은 방법을 포함하는 struct Vectorstruct Colornamespace GL을 추가합니다. 나는 Visual Studio 2017에서 freeglut의 정적 버전으로 GLUtils를 컴파일하고 있는데, 잘 컴파일 된 테스트 사용법을 컴파일 할 때 잘 컴파일되며, OpenGL을 추가 할 때까지 잘 실행했다. 테스트는 여전히 잘 컴파일되었지만 Application failed to start properly으로로드가 충돌하고 디버깅 할 때 메인이로드되기 전에 충돌이 발생했습니다. Dependency Walker를 사용하고 test.exe를 열면 freeglut.dll에서 kernel32.dll이 표시되지만 kernel32.dll 종속성이 충족되고 GLUtils.lib가 목록에 없습니다 (하지만 정적이라고 생각합니다.)).맞춤형 정적 라이브러리를 연결하는 방법은 무엇입니까?

경우에도 나는 GLUtils.cpp의 구현을 주석하고 Test.exe라는 여전히 같은 오류와 충돌

void GL::drawShape(Vector * points, ColorRGBA * colors, int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     //glColor4f(colors[i].r, colors[i].g, colors[i].b, colors[i].a); 
     //glVertex3f(points[i].x, points[i].y, points[i].z); 
    } 
} 

로 몸을 둡니다.

GLUtils.lib와 freeglut.lib를 Test.exe에 어떻게 연결해야합니까?

+0

사용의 #pragma 주석 (lib 디렉토리, "GLUtils.lib") 및 Test.cpp에에 freeglut 너무 – Asesh

+0

에 대해 동일한 작업을 수행하거나 내가 사용하고 어떤 파일? 나는 OpenGL을 추가하기 전에 그렇게 할 필요가 없었다. –

+0

테스트 프로젝트가 해당 라이브러리에 연결되어야합니다. 따라서 어떤 파일에 넣든 상관 없습니다. – Asesh

답변

0

이 오류의 원인은 유형 충돌로 인해 발생할 수 있습니다.

무효 GL :: drawShape (벡터 * 점, ColorRGBA * 색상, INT 크기)

, 당신은 당신이 당신의 GLUtils에서 만든 구조체 정의를 사용하려면 위의 함수 선언에 대한

하지만, 링커 다른 라이브러리에서 이미 정의 된 구조 이름을 찾아 실행 파일을 작성하기 위해 해당 구조 이름과 링크했습니다.

이 오류를 해결하려면 사용하려는 정의 (예 : 흐르는)를 링커에게 명시해야합니다.

void GL::drawShape(GL::Vector * points, GL::ColorRGBA * colors, int size) 
관련 문제