【问题标题】:Trying to compile OpenGL 4 Helloworld in CLion+CMake+MinGW on Windows. "undefined reference to `_imp____glewCreateShader' " errors [duplicate]尝试在 Windows 上的 CLion+CMake+MinGW 中编译 OpenGL 4 Helloworld。 “未定义对`_imp____glewCreateShader'的引用”错误[重复]
【发布时间】:2015-01-18 15:55:25
【问题描述】:

谷歌搜索告诉我这是“错误的 VS 库”,但是当尝试使用 glew-1.5.4-mingw32libgluew32.a 而不是 glew32 .lib(对 glut 也是如此)没有任何改变。

ma​​in.cpp来自VS2012上的项目,附加相同的库,所以它可能不会出错。

我用来制作的一些文件:

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'

【问题讨论】:

    标签: c++ opengl cmake mingw32 clion


    【解决方案1】:

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

    add_definitions(-DGLEW_STATIC)
    

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

    【讨论】:

      【解决方案2】:

      你自己编译 GLEW 吗?

      通常名为glew32 的库是动态链接,glew32s 是静态的。 MinGW 真的不喜欢 GLEW 的动态 (DLL) 版本,您应该避免使用它。 GLEW 站点上分发的预构建 Windows 动态 GLEW 库将无法与 MinGW 一起使用,因为 Visual C++ 和 gcc 导入库的函数命名约定之间存在差异(这是一个下划线的差异,但足以让生活变得非常困难)。

      如果您在包含<glew.h> 之前#define GLEW_STATIC 并链接到glew32s,这将消除动态链接库的任何潜在问题。实际上,如果您按照 Nazar554 的演示将定义添加到您的 Makefile 中,效果最佳。

      【讨论】:

        【解决方案3】:

        gist 是我在 linux 中编译 OpenGL 项目的方式。希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2019-10-12
          • 2017-06-05
          • 2015-06-02
          • 1970-01-01
          • 1970-01-01
          • 2022-01-12
          • 1970-01-01
          • 1970-01-01
          • 2016-08-21
          相关资源
          最近更新 更多