我希望开发一个使用C++和OpenGL开发的Windows 64位应用程序。
我正在使用以下编译器
这会产生以下错误:
x86_64-w64-mingw32-g++
。
下面的代码片段 (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)。 - Andon M. Colemang++
命令行中添加-Wl,--enable-stdcall-fixup
吗?另外,我相信-lopengl32
应该在参数列表的另一侧(应该放在最后)。 - Andon M. Coleman__stdcall
调用约定的函数末尾添加的额外“修饰符”。在这种情况下,它是@4
(这意味着它是一个标准的调用函数,将4字节大小的函数参数传递到堆栈上)。我不确定那是否是解决方法,还是仅仅移动了-lopengl32
,因为stdcall-fixup通常默认启用。 - Andon M. ColemanGL/gl.h
之前包含windows.h
以获取定义调用约定的WINAPI宏。您是否对OpenGL头文件进行了有趣的更改? - datenwolf