2017-05-09 37 views
0

未定义的引用 '[从GLEW库中各种事物]'联GLEW与MinGW64 - 未定义参考`__imp_glewExperimental”和'__imp___glewGenVertexArrays'

这是我的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() 

这是C进行输出:

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; 
} 

这里是从连接的输出:

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 

未定义参考3个GLEW元件。

注意,它并没有说undefined reference to '__imp_glewInit'

所以它是连接一些GLEW的,但不是万能的。

我运行glewinfo.exe和输出有glGenVertexArrays: OK 我认为这意味着我的驱动程序支持该功能。

回答

0

显然,来自GLEW网站的二进制文件只能用于Visual C++。

如果你想与MinGW一起使用它,你必须编译你自己的。

指令从这里复制:

https://www.opengl.org/discussion_boards/showthread.php/198730-How-do-I-build-GLEW-for-mingw-w64-using-cmake-on-Windows

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

2)下载,安装并更新msys2。不幸的是,如果没有它,我无法找到一种编译GLEW的方法(对于mingw-w64),但相信我,它是无痛的,一旦你完成了,你不需要msys2,我们只用它来编译GLEW库文件。在做任何事情之前,请按照官方msys2网站上的更新说明进行操作。它只有3步长。

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

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

3-a)您需要make和gcc for msys2。在msys2 cmd行运行:$ pacman -S gcc make

4)一旦你完成下载mingw-w64,gcc和make。您已准备好编译GLEW。解压缩先前下载的源文件,并将其放到C:\ msys64 \ home \ yourusername文件夹中。

5)打开msys2命令提示符,导航到glew2.xx文件夹,只要每一个完成运行在以下顺序的以下的CMD(): 5-a)作出 5-b)的使安装 5-c)make install.all

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

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