Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 访问任何与GLEW相关的内容都会立即使MinGW中的程序崩溃_Opengl_Mingw_Glew_Clion - Fatal编程技术网

Opengl 访问任何与GLEW相关的内容都会立即使MinGW中的程序崩溃

Opengl 访问任何与GLEW相关的内容都会立即使MinGW中的程序崩溃,opengl,mingw,glew,clion,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): 我正在Windows 8.1上使用

代码如下:

#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):

我正在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文件夹中

我错过了什么


我不明白为什么简单地给变量赋值会引发异常…

据我所知,有两个问题需要回答:

当我包含glewExperimental=GL\u TRUE时,为什么我的程序会崩溃;但当你离开它的时候就不会了

您的程序崩溃,因为它无法加载glew库。当您离开这一行时,不会调用glew,程序很可能甚至不会加载它

为什么我的程序在复制到system32文件夹时却找不到glew32.dll

如果您有64位操作系统,则system32是放置64位DLL的文件夹。我知道这听起来很可笑!,但windows就是这样工作的。32位库位于SysWOW64中。此答案包含有关此的更多详细信息:


通常,您不应该将DLL放在windows文件夹中的某个位置。此文件夹是为系统库/系统范围库(如驱动程序等)保留的。原因是,如果其他人将另一个版本(如glew32.dll)复制到系统文件夹中,您会遇到严重问题,这很可能会使您的应用程序崩溃。放置您自己的库的最佳方式是在您的可执行文件所在的目录中

我可以通过在CMakeLists.txt中添加以下行来解决此问题

add_definitions(-DGLEW_STATIC)
我不理解为什么上述方法会起作用,因为据我所知,以下方法也会产生同样的影响:

#define GLEW_STATIC

您不应该自己将DLL放在System32文件夹中。此文件夹是系统DLL的备份。简单地将它们放在可执行文件所在的文件夹中。您的代码已经定义了
GLEW\u STATIC
。这意味着所有关于GLEW的DLL版本的讨论都是完全无关的。您应该已经构建并链接到静态(非DLL)GLEW库。这是很有可能的,在你得到解决后,你的问题可能会消失-你当然不必担心GLEW DLL去哪里,因为它是没有必要的。谢谢这启发我的一天!我开始疯狂地给我错误
#define GLEW_STATIC