【问题标题】:Linking OpenGL using MinGW on Windows x86_64在 Windows x86_64 上使用 MinGW 链接 OpenGL
【发布时间】:2015-02-12 09:55:08
【问题描述】:

我想为 Windows 64 位开发一个使用 C++ 和 OpenGL 的应用程序。 我正在使用以下编译器x86_64-w64-mingw32-g++

以下代码 sn -p (Test.cpp) 足以触发我得到的错误:

#include <GL/gl.h>

int main(int argn, char **argv) {
    glClear(GL_COLOR_BUFFER_BIT);
}

(我知道这段代码没有意义,但是在链接过程中触发错误就足够了。)

我使用以下 Makefile:

Test:
    g++ -lopengl32 -o Test Test.cpp

这会产生以下错误:

undefined reference to `__imp_glClear'

我不知道我错过了什么,非常感谢任何建议。

【问题讨论】:

  • 这听起来不像调用约定是正确的。它应该是 __imp__glClear@4(在 MSVC 中实际上是 __stdcall)。
  • 您可以尝试将-Wl,--enable-stdcall-fixup 添加到您的g++ 命令行吗?另外,我很确定 -lopengl32 应该在你的论点列表的另一边(应该排在最后)。
  • @AndonM.Coleman 我尝试了 'g++ -o Test Test.cpp -Wl,--enable-stdcall-fixup -lopengl32',它适用于我的示例 'Text.cpp',非常感谢为此。我不知道这个额外的论点有什么作用,但我真的很想了解它。您能否向我解释一下,问题是什么以及附加参数是如何解决的?
  • 该参数告诉链接器尝试将 Microsoft Visual C++ 编译器添加到使用 __stdcall 调用约定的函数末尾的额外“装饰”。在这种情况下,它是@4(这意味着它是一个标准调用函数,在堆栈上传递了 4 字节的函数参数)。我不确定这是修复还是只是移动-lopengl32,因为默认情况下通常启用 stdcall-fixup 东西。
  • 通常在为 windows 平台编译时,您必须在 GL/gl.h 之前包含 windows.h 以获取定义调用约定的 WINAPI 宏。你用你的 OpenGL 头做了有趣的事情吗?

标签: c++ opengl linker mingw-w64


【解决方案1】:

对我来说,g++ main.cpp -o run.exe -lopengl32 似乎工作得很好,所以你很可能不需要-Wl,--enable-stdcall-fixup 来编译它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多