Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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

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
C++ 为什么我在这段代码中得到一个未定义的引用?_C++_Opengl_Linker_Undefined Reference_Glew - Fatal编程技术网

C++ 为什么我在这段代码中得到一个未定义的引用?

C++ 为什么我在这段代码中得到一个未定义的引用?,c++,opengl,linker,undefined-reference,glew,C++,Opengl,Linker,Undefined Reference,Glew,我正在使用Windows并调用函数glGenBuffers。当我使用它时,会出现以下错误: error: undefined reference to _imp____glewBufferData 我正在链接我的MinGW/lib文件夹中的glew32dll,我在MinGW/include中有glew.h。我还将glew32.dll放在WINDOWS/system32文件夹中 我是这样编译的: mingw32-g++.exe ... -lglfw -lglfw3 -lopengl32 -lgl

我正在使用Windows并调用函数
glGenBuffers
。当我使用它时,会出现以下错误:

error: undefined reference to _imp____glewBufferData
我正在链接我的
MinGW/lib
文件夹中的
glew32
dll,我在
MinGW/include
中有
glew.h
。我还将
glew32.dll
放在
WINDOWS/system32
文件夹中

我是这样编译的:

mingw32-g++.exe ... -lglfw -lglfw3 -lopengl32 -lglew32 -lgdi32 -lglu32 -lglew32s

是图书馆的顺序造成了这个问题吗?如果是这样的话,那么应该是什么?

< p>明文不喜欢用GLW为Windows进行二进制动态库,它只会用Visual C++来工作,除非你做了很多不必要的复杂的事情。
更简单的解决方案是从构建命令行中删除
-lglew32
,保留
-lglew32s
(静态库)并添加
-DGLEW_static
。最后一部分非常重要,因为当您
#包括“glew.h”
时,默认情况下glew采用动态链接<必须首先定义code>GLEW_STATIC,链接器才能正确解析Windows上的静态符号。

-DGLEW_STATIC
添加到命令行,因为您正在链接到静态库。您在问题中的描述是错误的,GLEW32 DLL与您的程序没有任何形式的关系。您可以继续删除它以节省磁盘空间:P@AndonM.Coleman我认为这是一个动态库,因为我使用的是一个dll…不,通过链接到
glew32s
,您就链接到了静态库(这就是s所代表的)。事实上,使用mingw,您甚至无法在不跳过几十个环的情况下链接到动态库。出现此错误是因为您至少编译了一个源文件而没有定义
GLEW_STATIC
,因此它使用了错误的链接。@AndonM.Coleman我还链接到动态库(
glew32.dll
)@AndonM.Coleman好的,您说的是对的。成功了。如果你回答,我会接受。你能帮我解决另一个问题吗?我创建了一个新项目,得到了一个未定义的引用,用于使用
glfwWindowHint
。所以我开始链接
glfw3
。但是我得到了一大堆我没有使用的函数的多重定义错误。它只在我使用
setWindowHint
时开始发生。有什么想法吗?@templateboy你必须问另一个问题,或者搜索一个已经有答案的类似问题。不幸的是,我从未使用过glfw。