opengl - 访问任何与 GLEW 相关的内容都会立即导致 MinGW 中的程序崩溃

标签 opengl mingw glew clion

这是代码:

#define GLEW_STATIC
#include "GL/glew.h"

int main () {
    glewExperimental = GL_TRUE;
    return 0;
}

这是输出:

Process finished with exit code -1073741515 (0xC0000135)

当“glewExperimental”行被注释掉时,程序以 0 退出。

这是 CMake 文件(我使用的是 CLion):

cmake_minimum_required(VERSION 2.8.4)
project(untitled)

add_definitions(-DGL_GLEXT_PROTOTYPES)
add_definitions(-DWINVER=0x0602)
add_definitions(-D_WIN32_WINNT=0x0602)

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

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

target_link_libraries(untitled  glfw3  glew32 opengl32 gdi32)

我在 Windows 8.1 上使用 MinGW 工具链。

我使用以下bat文件编译了GLEW库:

gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c

gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32

ar cr lib/libglew32.a src/glew.o

我将生成的 libglew32.a、libglew32.dll.a 放在 MinGW/lib 文件夹中。

我将 glew32.dll 放在 Windows/System32 文件夹中。

我将 GL/glew.h、glxew.h、wglew.h 放在 MinGW/include 文件夹中。

我错过了什么?

我无法弄清楚为什么简单地为该变量赋值会引发异常......

最佳答案

据我了解,有两个问题需要回答:

Why does my program crash when I include glewExperimental = GL_TRUE; but not when leaving it away?

您的程序因无法加载 glew 库而崩溃。当您离开此行时,不会调用glew,并且程序很可能不会加载它。

Why does my program not find glew32.dll although I copied it into the system32 folder?

如果您使用的是 64 位操作系统,则 system32 是放置 64 位 dll 的文件夹。我知道这听起来很奇怪!但这就是 Windows 的工作原理。 32 位库位于 SysWOW64 中。这个SO-answer包含有关此的更多详细信息:why-do-64-bit-dlls-go-to-system32-and-32-bit-dlls-to-syswow64-on-64-bit-windows .

一般来说,您不应该将 dll 放置在 Windows 文件夹中的某个位置。该文件夹是为系统库/系统范围的库(例如驱动程序等)保留的。这样做的原因是,如果其他人复制了另一个版本(例如, glew32.dll 到系统文件夹中,这很可能会使您的应用程序崩溃。放置您自己的库的最佳方法是放在可执行文件所在的目录中。

关于opengl - 访问任何与 GLEW 相关的内容都会立即导致 MinGW 中的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903593/

相关文章:

C++:Sublime Text 2 和 MinGW

visual-c++ - _imp 和 __imp 有什么区别?

c++ - 通过顶点属性指针将颜色坐标传递到顶点着色器

c++ - 无法使用 GLFW3 初始化 GLew

c++ - 遵循 C++/OpenGL 教程(导入图像)的问题

java - LWJGL 中 glOrtho 的替代品?

c++ - 我可以将 MSVCRT 静态链接到 mingw 吗?

c++ - 如何在 OpenGL 中使用 GLM?

c++ - 使用 GLM 库在 OpenGL 中绘制顶点时如何使用常规坐标系

c++ - 如何只将部分 OpenGL 代码实现到使用 SDL 编写的游戏中?