3

コードは次のとおりです。

#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 ツールチェーンを使用しています。

次のバッチ ファイルを使用して 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 フォルダーに配置しました。

私は何が欠けていますか?

その変数に値を割り当てるだけで例外がスローされる理由がわかりません...

4

2 に答える 2

4

私が理解したように、答えるべき2つの質問があります:

glewExperimental = GL_TRUE; を含めるとプログラムがクラッシュするのはなぜですか。しかし、それを離れるときではありませんか?

glew ライブラリを読み込めないため、プログラムがクラッシュします。この行をそのままにしておくと、glew が呼び出されず、プログラムはおそらくそれをロードしません。

system32 フォルダーにコピーしたのに glew32.dll が見つからないのはなぜですか?

64 ビットのオペレーティング システムを使用している場合、system32 は64 ビットのdll が配置されるフォルダーです。ばかげているように聞こえるかもしれませんが、これが Windows のしくみです。32 ビット ライブラリは SysWOW64 にあります。この SO - answer には、これに関する詳細が含まれています:

一般に、Windows フォルダーのどこかに dll を配置しないでください。このフォルダーは、システム ライブラリー/ドライバーなどのシステム全体のライブラリー用に予約されています。これは、誰かが glew32.dll などの別のバージョンをシステム フォルダーにコピーすると、深刻な問題が発生し、おそらくクラッシュするためです。アプリ。独自のライブラリを配置する最良の方法は、実行可能ファイルがあるディレクトリに配置することです。

于 2014-11-13T12:40:29.593 に答える