2013-06-06 49 views
1

当我使用GLFW和GLEW编译我的代码时,glewInit()是一个glewInit is undefined但glewExperimental不是

 undefined reference to '[email protected]'
好奇的一部分,就是它直接在上面的glewExperimental标记没有问题。 (如果我编译有glewInit()注释掉,它会编译成功并运行)

我的整体问题是,为什么glewInit()未定义,而将glewExperimental更改为true时不是;我该如何解决这个问题。

我MinGW的编译器调用:

 C:\MinGW\bin\c++.exe -x c++ -o "%cd%\aeonsplice.exe" -static "main.cpp" -Wl,glew32.dll,glfw.dll

当我打电话glewInit():

 
    glewExperimental = true; // this checks out as fine (I don't have glewExperimental declared anywhere) 
    if (glewInit() != GLEW_OK) // this is where it breaks 
    { 
     fprintf(stderr, "Failed to initialize GLEW, exiting.\n"); 
     aeonAPITerminate(); // This calls glfwTerminate() 
     return false; 
    } 

如果需要更多信息,我会按要求进行修改。是的,我做了搜索,并找到关于glewInit()的20多个问题没有工作,但没有一个符合我的问题。

+0

为什么一个可见而另一个不可见?它不会真正解决你的真正问题(即:未定义的外部问题)。 –

+0

是的,因为它表示glew的一部分被正确包含,而无论哪个部分包含glewInit都不是。 – Athix

+1

这是相关信息,但对解决方案并不重要。 – Kevin

回答

2

对于MinGW的编译器,你必须链接glew32s.lib没有glew32.lib,它必须在首先接头的名单上。

+0

我该怎么做到这一点?我是否需要编辑如何调用C++。exe或我的源代码中的某些内容? (我从不碰glew32.lib,包括它在mingw/libs之外) – Athix

+0

你必须在源文件的顶部定义“#define GLEW_STATIC”,并在调用mingw编译器链接时调用glew32s.lib而不是glew32.lin。 –

+0

将#define GLEW_STATIC添加到我的源文件的顶部没有明显变化,我从不包含glew32.lib,我包含glew32.dll(试图在文件中找不到glew32s.lib或glew32.lib结果,除非我将它添加到工作目录,在这种情况下,它会抛出一些函数的未定义引用,其中大多数是在不同位置重复的'_imp_wglGetProcAddress @ 4') – Athix