2015-01-18 1 views
1

"_imp____glewCreateShader ''에 대한 정의되지 않은 참조"는 "도서관 VS 잘못"했지만 나에게 말했다 대신 의 glew32.lib (libgluew32.a glew-1.5.4-mingw32를 사용하려고 할 때 그리고 똑같은) 아무것도 바뀌지 않았다.Windows에서 CLion + CMake + MinGW에서 OpenGL 4 Helloworld를 컴파일하려고합니다. 오류 aroung 인터넷 검색

main.cpp VS2012의 프로젝트에서 가져온 것과 같은 라이브러리가 붙어 있으므로 잘못하지 않을 수도 있습니다.

CMakeLists.txt LOG의

cmake_minimum_required(VERSION 2.8.4) 
project(HelloGL) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

add_executable(HelloGL main.cpp) 

set(LIBS_DIR D:/libs) 

set(GLEW_ROOT_DIR ${LIBS_DIR}/glew-1.5.4-mingw32) 
set(GLUT_ROOT_DIR ${LIBS_DIR}/glut-3.7.6-src/glut-3.7.6) 

set(GLEW_INCLUDE_DIRS ${GLEW_ROOT_DIR}/include) 
set(GLUT_INCLUDE_DIRS ${GLUT_ROOT_DIR}/include) 

set(GLEW_LIBRARY ${GLEW_ROOT_DIR}/lib/libglew32.a) 
set(GLUT_LIBRARY ${GLUT_ROOT_DIR}/lib/glut/libglut32.a) 


include_directories(${GLEW_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS}) 

target_link_libraries(HelloGL ${GLEW_LIBRARY} ${GLUT_LIBRARY}) 

부 : 당신의 CMakeLists.txt이 줄을 추가

"D:\Tools\CLion 140.569.17\bin\cmake\bin\cmake.exe" --build C:\Users\Alexey\.clion10\system\cmake\generated\dc6fcb22\dc6fcb22\Debug --target HelloGL -- -j 8 
    -- Configuring done 
    -- Generating done 
    -- Build files have been written to: C:/Users/Alexey/.clion10/system/cmake/generated/dc6fcb22/dc6fcb22/Debug 
    Linking CXX executable HelloGL.exe 
    CMakeFiles\HelloGL.dir/objects.a(main.cpp.obj): In function `Z11LoadShadersPKcS0_': 
    D:/Projects/CPP/HelloGL/main.cpp:19: undefined reference to `_imp____glewCreateShader' 
    D:/Projects/CPP/HelloGL/main.cpp:20: undefined reference to `_imp____glewCreateShader' 
    D:/Projects/CPP/HelloGL/main.cpp:56: undefined reference to `_imp____glewShaderSource' 
    D:/Projects/CPP/HelloGL/main.cpp:57: undefined reference to `_imp____glewCompileShader' 
    D:/Projects/CPP/HelloGL/main.cpp:60: undefined reference to `_imp____glewGetShaderiv' 
    D:/Projects/CPP/HelloGL/main.cpp:61: undefined reference to `_imp____glewGetShaderiv' 
    D:/Projects/CPP/HelloGL/main.cpp:64: undefined reference to `_imp____glewGetShaderInfoLog' 

답변

3

시도 :

add_definitions(-DGLEW_STATIC) 

일부 파일은 내가 만들어 사용

GLEW을 정적으로 연결하려고했지만 사용자가 정의하지 않은 것 같습니다. GLEW_STATIC

0

GLEW를 직접 컴파일 했습니까?

일반적으로 glew32이라는 라이브러리는 동적 연결이며 glew32s은 정적입니다. MinGW는 GLEW의 동적 (DLL) 버전을 정말로 좋아하지 않으므로 사용하지 않아야합니다. GLEW 사이트에 배포 된 사전 빌드 된 Windows 동적 GLEW 라이브러리는 MinGW에서 작동하지 않습니다. Visual C++와 gcc의 가져 오기 라이브러리에 대한 함수 명명 규칙 (차이점은 하나의 밑줄이 있지만 차이는 실제로 생기기 어렵습니다) 때문입니다.).

<glew.h>을 포함하기 전에 #define GLEW_STATIC을 입력하고 glew32s에 연결하면 동적 연결 라이브러리의 잠재적 문제를 해결할 수 있습니다. 실제로 이것은 Nazar554가 보여준 것처럼 Makefile에 정의를 추가 할 때 가장 잘 작동합니다.

-2

gist은 내가 리눅스에서 OpenGL 프로젝트를 컴파일하는 방법입니다. 희망 도움이

관련 문제