以下是代码:
#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文件夹中。
我将teh glew32.dll放在Windows / System32文件夹中。
我将GL / glew.h,glxew.h,wglew.h放在MinGW / include文件夹中。
我错过了什么?
我无法弄清楚为什么简单地为该变量赋值会引发异常......
答案 0 :(得分:4)
据我所知,有两个问题需要回答:
为什么我的程序在包含glewExperimental = GL_TRUE时崩溃;离开的时候不是吗?
您的程序崩溃,因为它无法加载glew库。当你离开这条线路时,没有拨打glew,程序很可能甚至都不会加载它。
为什么我的程序找不到glew32.dll,虽然我把它复制到system32文件夹中?
如果您有64位操作系统,则system32是放置 64位 dll的文件夹。我知道这听起来很棒!,但这就是Windows的工作原理。 32位库位于SysWOW64中。此SO答案包含有关此问题的更多详细信息:why-do-64-bit-dlls-go-to-system32-and-32-bit-dlls-to-syswow64-on-64-bit-windows。
通常,您不应该将dll放在windows文件夹中的某个位置。这个文件夹是为系统库/系统范围的库(如驱动程序等)保留的。原因是,如果其他人复制了另一个版本的文件,那么你会遇到很大的麻烦。 glew32.dll进入系统文件夹,这很可能会崩溃你的应用程序。放置自己的库的最佳方法是在可执行文件所在的目录中。
答案 1 :(得分:0)
我可以通过将以下行添加到CMakeLists.txt
来解决add_definitions(-DGLEW_STATIC)
我不明白为什么上述情况会起作用,因为据我所知,以下内容会产生同样的影响:
#define GLEW_STATIC