Visual Studio社区2017 LNK2019未解析的外部符号

时间:2017-04-01 21:40:58

标签: c++ visual-studio opengl glew

我一整天都在四处寻找,但我找不到任何解决方案。我使用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);

}

1 个答案:

答案 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是一个指令集架构。但是x86更常用于指代32位。而x64用于表示64位。架构是相同的,它只是64位而不是32位。还调用了64位版本的x86体系结构 x86-64 or AMD64

这也意味着64位CPU可以执行32位指令。但是32位CPU无法执行64位指令。这就是应用程序通常以32位计算机为目标的原因。