C++ 链接GLEW与MinGW64-未定义对`u imp_glewExperimental';和“imp”和“GlewGenvertexarray';

C++ 链接GLEW与MinGW64-未定义对`u imp_glewExperimental';和“imp”和“GlewGenvertexarray';,c++,glew,mingw-w64,C++,Glew,Mingw W64,对“[GLEW库中的各种内容]”的未定义引用 这是我的CMakeLists.txt: cmake_minimum_required(VERSION 3.7) project(newerOpenGLTest) set(CMAKE_CXX_STANDARD 11) set(SOURCE_FILES main.cpp) add_executable(newerOpenGLTest ${SOURCE_FILES}) find_package(OpenGL) # tell it where to

对“[GLEW库中的各种内容]”的未定义引用

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.7)
project(newerOpenGLTest)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(newerOpenGLTest ${SOURCE_FILES})

find_package(OpenGL)

# tell it where to look for glew
set(CMAKE_PREFIX_PATH "F:/glew-2.0.0")
set(CMAKE_LIBRARY_PATH "F:/glew-2.0.0/lib/Release/x64")

find_package(GLEW REQUIRED)

if (GLEW_FOUND)
    message(${GLEW_INCLUDE_DIRS})
    message(${GLEW_LIBRARIES})

    # Detect and add SFML
    set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
    #Find any version 2.X of SFML
    #See the FindSFML.cmake file for additional details and instructions
    find_package(SFML 2 REQUIRED graphics window system)

    if(SFML_FOUND)
        include_directories(
                ${GLEW_INCLUDE_DIRS}
                ${SFML_INCLUDE_DIR}
        )
        target_link_libraries(
                newerOpenGLTest
                ${GLEW_LIBRARIES}
                ${SFML_LIBRARIES}
                ${SFML_DEPENDENCIES}
                ${OPENGL_gl_LIBRARY}
        )
    endif()

endif()
这是Cmake的输出:

F:/glew-2.0.0/include
F:/glew-2.0.0/lib/Release/x64/glew32.lib
-- Found SFML 2.4.2 in F:/SFML-2.4.2 for GCC 6.1.0 MinGW (SEH) - 64-bit/include
-- Configuring done
-- Generating done
-- Build files have been written to: F:/Users/Doug/CLionProjects/newerOpenGLTest/cmake-build-debug
我觉得那里一切都很好。它查找GLEW并查找包含文件和库的位置

以下是我的main.cpp:

#include <GL/glew.h>

#include <SFML/Window.hpp>

int main() {
    sf::Window window(sf::VideoMode(800, 600), "openGL");
    window.setVerticalSyncEnabled(true);
    window.setActive(true);

    // Initialize GLEW
    glewExperimental = true;
    if (glewInit() != GLEW_OK) {
        fprintf(stderr, "Failed to initialize GLEW\n");
        return -1;
    }

    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);

    bool running = true;
    while (running) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                running = false;
            }
        }
    }
    return 0;
}
对3个GLEW元素的未定义引用

请注意,它并没有说
对“\uu imp\u glewInit”的未定义引用

因此,它是连接一些GLEW,但不是所有

我运行
glewinfo.exe
,并且输出具有
glgenvertexarray:OK

我认为这意味着我的驱动程序支持这个功能。

< P>显然,GLW网站的二进制文件只对Visual C++工作。 如果您想与MinGW一起使用它,您必须编译自己的

从此处复制的说明:

1) 下载GLEW源文件。除非您使用的是Visual Studio,否则不要下载32/64位窗口二进制文件,如果您使用的是Visual Studio,您就不会阅读本文

2) 下载、安装和更新msys2。不幸的是,如果没有它,我无法找到编译GLEW(针对mingw-w64)的方法,但是相信我,这是毫无痛苦的,而且一旦完成,就不需要msys2,我们只使用它来编译GLEW lib文件。在执行任何其他操作之前,请遵循官方msys2站点上的更新说明。它只有三步长

警告:由于某些奇怪的原因,一旦通过第二个更新步骤,msys2命令提示符快捷方式将停止在我的计算机上工作。只需导航到c:/msys2文件夹并运行msys2_shell.cmd即可

3) msys2需要mingw-w64。一些堆栈溢出的答案建议下载64位和32位版本的mingw,但由于我不是这方面的专家,这变成了一种痛苦,所以我最好下载64位版本,这正是我正在使用和瞄准的。在msys2 cmd提示符中运行以下cmd:$pacman-S gcc make mingw-w64-x86_64-gcc

3-a)您需要msys2的make和gcc。在msys2命令行中运行此命令:$pacman-S gcc make

4) 下载完mingw-w64、gcc和make后。您已经准备好编译GLEW了。解压缩之前下载的源文件,并将其放入您的C:\msys64\home\yourusername文件夹中

5) 打开msys2 cmd提示符,导航到glew2.x.x文件夹,并按以下顺序运行以下cmd(每次完成后): 5-a)制造 5-b)进行安装 5-c)全部安装

6) 您可能会收到一些错误和警告,不要担心。查看glew2.x.x文件夹中的lib文件夹,您将看到所需的lib文件

7) 将glew32.dll复制到程序可执行文件所在的文件夹中,将libglew32.a复制到程序的lib文件夹中

Linking CXX executable newerOpenGLTest.exe
CMakeFiles\newerOpenGLTest.dir\build.make:100: recipe for target 'newerOpenGLTest.exe' failed
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/newerOpenGLTest.dir/all' failed
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/newerOpenGLTest.dir/rule' failed
Makefile:117: recipe for target 'newerOpenGLTest' failed
CMakeFiles\newerOpenGLTest.dir/objects.a(main.cpp.obj): In function `main':
main.cpp:xx: undefined reference to `__imp_glewExperimental'
main.cpp:xx: undefined reference to `__imp___glewGenVertexArrays'
main.cpp:xx: undefined reference to `__imp___glewBindVertexArray'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [newerOpenGLTest.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/newerOpenGLTest.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/newerOpenGLTest.dir/rule] Error 2
mingw32-make.exe: *** [newerOpenGLTest] Error 2