我一整天都在四处寻找,但我找不到任何解决方案。我使用opengl扩展glew,glfw和glm。 Visual Studio Community 2017引发异常:严重性代码描述项目文件行抑制状态 错误LNK2019未解析的外部符号__imp__glewInit @ 0在函数_main Name Directory中引用。
我的项目位于:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape 我的扩展名位于:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL Exetensions Binaries \ unzipped
我添加了c ++ include目录:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL Exetensions Binaries \ unzipped \ glm-0.9.8.4%281%29 \ glm;
C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL Exetensions Binaries \ unzipped \ glfw-3.2.1.bin.WIN64 \ glfw-3.2.1.bin.WIN64 \ include;
C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL Exetensions Binaries \ unzipped \ glew-2.0.0-win32 \ glew-2.0.0 \ include;
我添加了Linker通用库目录: C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL Exetensions Binaries \ unzipped \ glew-2.0.0-win32 \ glew-2.0.0 \ lib \ Release \ x64;
Visual Studio告诉我我有一台x86机器,我并不完全清楚这意味着什么,但是从我假设这台机器运行的是64位窗口。
我尝试混合所有选项,例如不同的添加目录/库选项,我可以找不到解决方案。这可能是之前被问到但不是2017年的视觉工作室社区。请帮忙。谢谢。 :)
哦,这是我尝试使用glew32.lib的pragma注释的代码。
#include <stdlib.h>
#include <stdio.h>
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <glm\glm.hpp>
int main()
{
if (!glfwInit())
{
fprintf(stderr, "Failed to initialize GLFW\n");
return -1;
}
glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // We want OpenGL 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL
// Open a window and create its OpenGL context
GLFWwindow* window; // (In the accompanying source code, this variable is global)
window = glfwCreateWindow(1024, 768, "Tutorial 01", NULL, NULL);
if (window == NULL) {
fprintf(stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n");
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window); // Initialize GLEW
glewExperimental = true; // Needed in core profile
if (glewInit() != GLEW_OK) {
fprintf(stderr, "Failed to initialize GLEW\n");
return -1;
}
// Ensure we can capture the escape key being pressed below
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
do {
// Draw nothing, see you in tutorial 2 !
// Swap buffers
glfwSwapBuffers(window);
glfwPollEvents();
} // Check if the ESC key was pressed or the window was closed
while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0);
}
答案 0 :(得分:1)
LNK2019未解析的外部符号__imp__glewInit @ 0在函数_main中引用
这告诉您它无法找到外部符号。这是因为您没有关联glew32.lib
。
在使用MSVC / Visual Studio时,请尝试将glew32.lib
添加到项目目录中。然后在项目属性 - &gt;下添加glew32.lib
配置属性 - &gt;链接器 - &gt;输入 - &gt;其他依赖性。由于您正在使用MSVC,您也可以(如您所述)添加以下内容:
#pragma comment(lib, "glew32.lib")
如果项目目录中有glew32.lib
,并将上面的行添加到.cpp
文件中。然后不应该出现链接器错误。
现在(给出你的例子)只需添加类似glClear()
的内容,然后你会得到类似的内容:
LNK2019未解析的外部符号__imp__glClear @ 4在函数_main中引用
那是因为您还需要将opengl32.lib
添加到链接器中。
#pragma comment(lib, "opengl32.lib")
如果您收到如下链接器错误:
LNK4272:库机器类型'X86'与目标机器类型'x64'
冲突
这意味着你正在为x64构建,但是你的一些库是为x86构建的。换句话说,您可能正在使用glew32.lib
的x64版本,而实际上您需要使用x86版本的glew32.lib
。
如果您的代码编译但是在运行应用程序时,您会得到类似的内容:
程序无法启动,因为您的计算机缺少glew32.dll。
然后将glew32.dll
添加到项目目录中。
再次版本问题,所以如果应用程序崩溃说类似:
应用程序无法正确启动(0xc000007b)
然后就像你的应用程序可能是为x86构建的那样,但是glew32.dll
是为x64构建的应用程序。
验证上面的所有内容,它应该编译并运行。
最后但并非最不重要。而不是使用GLEW我强烈建议切换到GLAD。 GLEW已经破旧了,据我所知,它已经不再支持了。
另外GLAD更容易设置和使用。您转到生成器,选择要定位的版本,按生成并下载实现(.c
)文件和几个标题(.h
)。而已。没有可以链接的库,没有可随身携带的dll。
x86是一个指令集架构。但是x86更常用于指代32位。而x64用于表示64位。架构是相同的,它只是64位而不是32位。还调用了64位版本的x86体系结构 x86-64 or AMD64
这也意味着64位CPU可以执行32位指令。但是32位CPU无法执行64位指令。这就是应用程序通常以32位计算机为目标的原因。