我整天都在四处寻找,但没有找到解决方法。我正在使用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/

10-11 21:08