Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试图在CLion+;中编译OpenGL 4 Helloworld;CMake+;在窗户上鸣叫&引用;未定义对“\u imp\uuuuuuu glewCreateShader'&引用;错误_C++_Opengl_Cmake_Mingw32_Clion - Fatal编程技术网

C++ 试图在CLion+;中编译OpenGL 4 Helloworld;CMake+;在窗户上鸣叫&引用;未定义对“\u imp\uuuuuuu glewCreateShader'&引用;错误

C++ 试图在CLion+;中编译OpenGL 4 Helloworld;CMake+;在窗户上鸣叫&引用;未定义对“\u imp\uuuuuuu glewCreateShader'&引用;错误,c++,opengl,cmake,mingw32,clion,C++,Opengl,Cmake,Mingw32,Clion,Google aroung告诉我这是“错误的VS库”,但当尝试使用glew-1.5.4-mingw32和libgluew32.a而不是glew32.lib(对glut也是如此)时,一切都没有改变 main.cpp从VS2012上的项目获得,附加了相同的LIB,因此可能没有错 我用来制作的一些文件: CMakeLists.txt cmake_minimum_required(VERSION 2.8.4) project(HelloGL) set(CMAKE_CXX_FLAGS "${CMAKE_

Google aroung告诉我这是“错误的VS库”,但当尝试使用glew-1.5.4-mingw32libgluew32.a而不是glew32.lib(对glut也是如此)时,一切都没有改变

main.cpp从VS2012上的项目获得,附加了相同的LIB,因此可能没有错

我用来制作的一些文件:

CMakeLists.txt

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} )
日志的一部分:

 "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'

尝试将此行添加到您的
CMakeLists.txt

add_definitions(-DGLEW_STATIC)

似乎您正在尝试静态链接
GLEW
,但您没有定义
GLEW\u STATIC

您自己编译了GLEW吗

通常称为
glew32
的库是动态链接的,
glew32s
是静态的。MinGW确实不喜欢动态(DLL)版本的GLEW,您可能应该避免使用它。在GLW站点上发布的预先构建的Windows动态GLW库将不能与MINW一起使用,因为VisualC++和GCC的函数命名约定对于导入库是不同的(这是一个下划线的差异,但足以使生命变得非常困难)。 如果在包含
和链接到
glew32s
之前定义GLEW#u STATIC,将消除动态链接库的任何潜在问题。实际上,如果您像Nazar554所演示的那样将定义添加到Makefile中,这将最有效。

这就是我在linux中编译OpenGL项目的方式。希望能有帮助