【问题标题】:Compiling GLEW source in a project results in unresolved external symbols [duplicate]在项目中编译 GLEW 源会导致无法解析的外部符号 [重复]
【发布时间】:2017-12-27 00:45:20
【问题描述】:

当我尝试编译我的 VS 2015 C++ 项目时,我得到了 9 个未解决的外部符号错误。当我尝试将 GLEW 编译为我的项目的一部分(使用源代码)时发生错误。谷歌搜索显示此错误通常是由于缺少 OpenGL 库引起的,但我已经在使用 SDL2,据我所知,它的源代码中包含 OpenGL。这是我尝试编译时的输出。

Error   LNK2001 unresolved external symbol __imp__wglGetCurrentDC@0 glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglGetProcAddress@4   glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__glGetString@4 glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__glGetIntegerv@8   glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglCreateContext@4    glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglDeleteContext@4    glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglMakeCurrent@8  glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglGetCurrentContext@0    visualinfo.obj  1   
Error   LNK2001 unresolved external symbol _gluGetString@   4visualinfo.obj     1   
Error   LNK1120 9 unresolved externals  Executable.exe  1   

如果我需要在我的项目中包含另一个库,我在哪里可以下载它?另外,如果有,它有源代码吗?如果可能,我宁愿避免使用 .dll。

编辑:这不仅仅是未解析外部符号的一般示例。我在问我需要包含哪些库来修复错误。

【问题讨论】:

    标签: c++ opengl sdl glew


    【解决方案1】:

    要将 GLEW 编译为添加到项目中的源文件,请使用以下步骤:

    1. 唯一需要的文件是glew.c。删除 glewinfo.cvisualinfo.c - 这些只是 GLEW 提供的示例程序。此步骤将解决缺少的glu* 符号。

    2. GLEW_STATIC 添加到预处理器定义列表。默认是将 GLEW 编译成 DLL。

    3. opengl32.lib 添加到附加依赖项列表(在链接器/输入下)。这将解决缺少的wgl* 符号。

    或者,您可以考虑使用包含在 GLEW 的 build/vc12 子文件夹下的项目文件来构建静态库并与之链接,或者将项目 glew_static 添加到您的解决方案中。上面的步骤 2 和 3 仍然是必要的。

    顺便说一句,每个 Windows API 函数都记录在案,并描述了所需的库和头文件。例如,docs for wglGetCurrentDC() 有一个表,其中包含提供函数的标头、库和 DLL。

    【讨论】:

    • 那我该怎么做呢?如果我使用 Windows API,我还能保持跨平台支持吗?
    • 您需要按照msdn.microsoft.com/en-us/library/ba1z7822.aspx中的说明添加这些内容
    • 这些是 GLEW 在 Windows 上的要求。在其他平台上,它有其他要求。它不会干扰跨平台支持——只是每个平台都需要适当的库。
    • 愚蠢的问题:我已经包含了两个 .lib 文件,但是如何包含 .dll 文件?
    • 这些 .lib 文件是导入库。当您将代码与导入库链接时,它将在运行时自动加载适当的 .DLL(如果存在)。幸运的是,这两个 DLL 应该存在于每台 Windows 机器上,并且会自动加载。另见en.wikipedia.org/wiki/Dynamic-link_library#Import_libraries
    猜你喜欢
    • 2023-03-22
    • 2016-10-13
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多