这是代码:
#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/