我整天都在四处寻找,但没有找到解决方法。我正在使用opengl扩展glew,glfw和glm。 Visual Studio Community 2017引发异常:严重性代码说明项目文件行抑制状态
错误_main名称目录中引用的LNK2019无法解析的外部符号__imp__glewInit @ 0。
我的项目位于:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape
我的扩展位于:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL扩展二进制文件\解压缩
我已经添加了c++ include目录:C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL扩展二进制文件\未压缩\ glm-0.9.8.4%281%29 \ glm;
C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL扩展二进制文件\未压缩\ glfw-3.2.1.bin.WIN64 \ glfw-3.2.1.bin.WIN64 \ include;
C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL扩展二进制文件\未压缩\ glew-2.0.0-win32 \ glew-2.0.0 \ include;
我添加了链接程序常规库目录:
C:\ Users \ timbucktoo \ Desktop \ Projects \ Scape \ Scape \ OpenGL扩展二进制文件\解压缩\ glew-2.0.0-win32 \ glew-2.0.0 \ lib \ Release \ x64;
Visual Studio告诉我我有一台x86机器,我不完全知道这意味着什么,但是从我认为这台机器正在运行64位Windows的 Angular 出发。
我试过混合所有选项,例如不同的添加目录/库选项,但我无法解决。可能之前曾有人问过这个问题,但Visual Studio Community 2017却没有问过。请帮助。谢谢。 :)
哦,这是我还尝试在glew32.lib中使用编译指示的代码。
#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);
}
最佳答案
这告诉您找不到外部符号。这是因为您没有链接glew32.lib
。
当您使用MSVC / Visual Studio时,请尝试将glew32.lib
添加到您的项目目录中。然后在项目属性->配置属性->链接器->输入->其他依赖项下添加glew32.lib
。由于您正在使用MSVC,因此您也可以(如上所述)添加以下内容:
#pragma comment(lib, "glew32.lib")
如果您的项目目录中有
glew32.lib
,并将上面的行添加到.cpp
文件中。然后,该链接器错误不应出现。现在(根据您的示例),只需添加类似于
glClear()
的内容,然后您将获得类似于以下内容的内容:那是因为您还需要将
opengl32.lib
添加到链接器。#pragma comment(lib, "opengl32.lib")
如果收到这样的链接器错误:
这意味着您正在为x64构建,但是您的某些库是为x86构建的。换句话说,您可能正在使用xt64版本的
glew32.lib
,而实际上需要使用x86版本的glew32.lib
。如果您的代码可以编译,但是在应用程序运行时,您将得到类似以下内容的信息:
然后将
glew32.dll
添加到您的项目目录中。同样,版本也很重要,因此如果应用程序崩溃,则表示以下内容:
然后就像在为x86构建应用程序之前一样,但是
glew32.dll
是为x64构建的应用程序。验证上面的所有内容,它应该可以编译并运行。
最后但并非最不重要的。我强烈建议不要切换为GLAD,而不要使用GLEW。 GLEW是古老而残破的,据我所知,它不再受支持了。
另外,GLAD更易于设置和使用。您转到生成器,选择要定位的版本,按生成并下载实现(
.c
)文件和一些 header (.h
)。而已。没有可链接的库,没有可携带的dll或任何东西。我有一台x86机器,我不完全知道这意味着什么
x86是指令集体系结构。但是x86更常用于指代32位。而x64用于表示64位。体系结构是相同的,只是64位而不是32位。 x86体系结构的64位版本也称为
x86-64 or AMD64。
这也意味着64位CPU可以执行32位指令。但是32位CPU无法执行64位指令。这就是为什么应用程序通常以32位计算机为目标的原因。
关于c++ - Visual Studio Community 2017 LNK2019尚未解决的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43162311/