2014-05-21 5 views
1

저는 Windows를 사용하고 있습니다. 함수는 glGenBuffers입니다. 내가 그것을 사용할 때 나는 다음과 같은 오류 얻을 :이 코드에서 정의되지 않은 참조가 나오는 이유는 무엇입니까?

error: undefined reference to _imp____glewBufferData 

MinGW/lib 폴더에있는 glew32 DLL에 연결하고있어, 그리고 나는 MinGW/include 내부 glew.h 있습니다. WINDOWS/system32 폴더 안에 glew32.dll도 넣습니다.

I는 다음과 같이 컴파일하고 있습니다 : 그것은 문제를 일으키는 라이브러리의 순서

mingw32-g++.exe ... -lglfw -lglfw3 -lopengl32 -lglew32 -lgdi32 -lglu32 -lglew32s 

인가? 그렇다면 다른 것 앞에 무엇이 있어야합니까?

+1

정적 라이브러리에 연결 중이므로 명령 줄에'-DGLEW_STATIC'을 추가하십시오. GLEW32 DLL은 프로그램의 모양이나 형식과 관련이 없습니다. 당신은 앞뒤로 가서 디스크 공간을 절약하기 위해 삭제할 수 있습니다 : P –

+0

@ AndonM.Coleman dll을 사용하고 있기 때문에 이것이 동적 라이브러리라고 생각했습니다 ... –

+0

아니요, 'glew32s'에 링크하면 * ** 정적 *** 라이브러리 (즉, ** s **의 약자입니다). 사실, mingw를 사용하면 수십 개의 농구를 뛰어 넘지 않고도 동적 라이브러리에 연결할 수 없습니다. 'GLEW_STATIC'을 정의하지 않고 소스 파일 중 하나 이상을 컴파일했기 때문에이 오류가 발생했습니다. 따라서 잘못된 연결을 사용하고 있습니다. –

답변

3

MinGW는 Windows 용 glew와 함께 제공되는 바이너리 동적 라이브러리를 좋아하지 않으며, 불필요하게 복잡한 작업을 많이하지 않는 한 Visual C++에서만 작동합니다.

훨씬 간단한 해결책은 빌드 명령 줄에서 -lglew32을 제거하고 -lglew32s (정적 라이브러리)을 유지하고 -DGLEW_STATIC을 추가하는 것입니다. 마지막 부분은 #include "glew.h" 일 때 glew가 동적 연결을 기본적으로 가정하기 때문에 매우 중요합니다. Windows에서 정적 기호를 제대로 해결하려면 링커에서 먼저 GLEW_STATIC을 정의해야합니다.

+0

다른 문제를 도와 줄 수 있습니까? 나는 새로운 프로젝트를 만들었고'glfwWindowHint'를 사용하기위한 정의되지 않은 참조를 얻었습니다. 그래서'glfw3'에 연결하기 시작했습니다. 그런데 사용하지도 않는 여러 함수에 대해 여러 정의 오류가 있습니다. 'setWindowHint'를 사용할 때만 시작됩니다. 어떤 아이디어? –

+0

@templateboy 다른 질문을하거나 대답이있는 비슷한 질문을 검색해야합니다. 불행히도, 나는 glfw를 사용한 적이 없다. –