首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MinGW-w64上运行freeglut 3.2.1和GLEW 2.1.0?

如何在MinGW-w64上运行freeglut 3.2.1和GLEW 2.1.0?
EN

Stack Overflow用户
提问于 2020-08-17 21:05:26
回答 1查看 830关注 0票数 0

我对编程有点陌生,我试图让OpenGL程序在X64bit C++编译器上运行。代码在MinGW - Windows的最小上工作,并在上面安装了免费3.0.0 MinGW软件包

我试着让我的项目与:

  1. 我安装在这些stackoverflow指令之后的MinGW-w64。
  2. 以及按照这些medium.com指令安装的freeglut3.2.1和Glew2.1.0(跳过步骤1-3,因为我已经安装了cmake和MinGW-w64 )。

它显示所有安装都是正确的,正如说明所解释的那样。

然后,我在我的MinGW编辑器(File>Settings>Build,Execute,Deployment>Toolchains)中更新了选择为MinGW-w64的CLion,并点击了build按钮。贝娄是它造成的错误。

在我的CMakeLists.txt里,我有target_link_libraries(SnakeGame_run SnakeGame_lib -lopengl32 -lglew32 -lfreeglut -lglu32)。在代码中,无论我在哪里使用#include <GL/freeglut.h>,它前面都包含了#include <GL/glew.h>。据我所知,我已经完成了所有的设置,但它不会在编译时链接freeglut或GLEW (如果我理解正确的话)。

如何使这两个库兼容?

代码语言:javascript
复制
"C:\...\JetBrains\CLion 2019.3.4\bin\cmake\win\bin\cmake.exe" --build C:\...\Snake-Game\cmake-build-debug --target SnakeGame_run -- -j 9
[ 81%] Built target SnakeGame_lib
[90%] Linking CXX executable SnakeGame_run.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libglew32.dll.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib\libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libglew32.dll.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib\libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libglew32.dll.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libglew32.dll.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libglew32.a when searching for -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglew32
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libfreeglut.dll.a when searching for -lfreeglut
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libfreeglut.dll.a when searching for -lfreeglut
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libfreeglut.dll.a when searching for -lfreeglut
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libfreeglut.dll.a when searching for -lfreeglut
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lfreeglut
EN

回答 1

Stack Overflow用户

发布于 2020-08-19 07:04:07

因此,如果您在动态链接GLEW和freeglut时遇到了这样的问题,我建议您可以自己构建库并静态链接。

大楼GLEW

假设已经安装了MSYS2 2/Mingw-W64工具链,请从包含的中介链接下载GLEW源,并根据自述指令构建库:

代码语言:javascript
复制
#### MSYS2/Mingw-w64

Available from [Msys2](http://msys2.github.io/) and/or [Mingw-w64](http://mingw-w64.org/)

Requirements: bash, make, gcc

    $ pacman -S gcc make  mingw-w64-i686-gcc mingw-w64-x86_64-gcc 
    $ make
    $ make install
    $ make install.all

您可以省略安装,因为我们将在以后通过库路径。只需确保glew库在/lib目录中显示在make之后。

大楼/链接自由式

至于freeglut,我建议从这里下载二进制文件:https://www.transmissionzero.co.uk/software/freeglut-devel/ (freeglut3.0.0 MinGW Package - https://www.transmissionzero.co.uk/files/software/development/GLUT/freeglut-MinGW.zip)。解压缩包后,有一个/lib文件夹,其中有一个x64目录。因此,我们将链接到这些库。顾名思义,它们是用于x64架构的。

将它链接到一起

这并不是在target_link_libraries中显式放置库名的最佳实践,但让我们继续使用它。如果它有效的话,它可能会在稍晚的时候被重构。

到目前为止,这是您的cmake命令:target_link_libraries(SnakeGame_run SnakeGame_lib -lopengl32 -lglew32 -lfreeglut -lglu32) Now、lopengl32和lglu32似乎链接正确,问题在于lglew32和lfreeglut,但在前面的步骤中,我们确保一定有x64二进制文件。但是现在我们必须确保您的应用程序与适当的库链接,因此为了进行测试,CMake允许我们指定到库(libraries.html)的完整路径。因此,假设GLEW在C:\Projects\my_downloaded_glew中,并且构建的库显示为C:\Projects\my_downloaded_glew\lib\libglew32,我们必须用C:\Projects\my_downloaded_glew\lib\libglew32替换-lglew32。现在,在下载了freeglut之后,我假设下载的过剩二进制文件在C:\Projects\my_downloaded_freeglut\lib\x64\中,因此-lfreeglut将不得不被C:\Projects\my_downloaded_freeglut\lib\x64\libfreeglut所取代。把所有这些放在一起,它会尝试以下几点:

代码语言:javascript
复制
target_link_libraries(SnakeGame_run SnakeGame_lib -lopengl32 C:\Projects\my_downloaded_glew\lib\libglew32 C:\Projects\my_downloaded_freeglut\lib\x64\libfreeglut -lglu32)

我相信你已经安装的标题应该是兼容的。

如果有帮助请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63458637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档