MSYS2的OpenGL设置

3

我正在尝试在MSYS2上编写OpenGL。我安装了mingw-w64包,如SDL2、glew、glm、mesa等。但是当我尝试编译类似以下的内容时:

    gcc main.c -o main -lSDL2 -lGLEW -lGLU -lGL

这是我在Linux上编译的方法,所以我认为应该类似。但是-lGL出现了问题。我找不到任何适用于MSYS2的OpenGL库。我像我说的安装了mesa,但没有成功。我是否应该使用随驱动程序提供的Windows版本并链接到它?虽然我不知道如何做到这一点。

我将OpenGL32.dll和lib文件从Windows复制到mingw64/lib文件夹,并将其重命名为libGL,但当然这并没有起作用。

1个回答

7
如果我没记错的话,在Windows上这些库的名称是不同的。 尝试使用 -lglew32 -lglu32 -lopengl32

谢谢,这个方法对我有用。现在链接器报错:"C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain' collect2.exe: error: ld returned 1 exit status" 应该是关于 C 运行库的问题。 - meguli
@meguli 我认为问题出在你的 main() 函数上。当使用 SDL 时,你需要确保你的 main 函数签名看起来像 int main(int, char **)。你的 main 函数是这样的吗? - HolyBlackCat
@meguli 在Windows下,GUI应用程序的入口点实际上是WinMain(HISTANCE *, HINSTANCE *, char *, int)而不是main(int,char**)。为了包装这个,SDL通常会附带一个名为SDLmain的库来调用常规的main函数。 - PeterT
@meguli 这意味着你需要在 -lSDL2 之前添加 -lSDL2main。我忘记了这个标志。你可以WinMain(..) 手动进行 SDL 初始化,但这不是一个可移植的解决方案。 - HolyBlackCat
实际上文档中说明您需要链接“sdl2-config --libs”输出的所有内容。 - meguli
@meguli 那么你应该这样做。但我认为它应该输出“-SDL2main -lSDL2”,对吗?这是我在Windows下动态链接SDL的方式。如果我使用静态链接,那么我需要链接其他10个左右的库。 - HolyBlackCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接