我对编程有点陌生,我试图让OpenGL程序在X64bit C++编译器上运行。代码在MinGW - Windows的最小上工作,并在上面安装了免费3.0.0 MinGW软件包。
我试着让我的项目与:
它显示所有安装都是正确的,正如说明所解释的那样。
然后,我在我的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 (如果我理解正确的话)。
如何使这两个库兼容?
"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发布于 2020-08-19 07:04:07
因此,如果您在动态链接GLEW和freeglut时遇到了这样的问题,我建议您可以自己构建库并静态链接。
大楼GLEW
假设已经安装了MSYS2 2/Mingw-W64工具链,请从包含的中介链接下载GLEW源,并根据自述指令构建库:
#### 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所取代。把所有这些放在一起,它会尝试以下几点:
target_link_libraries(SnakeGame_run SnakeGame_lib -lopengl32 C:\Projects\my_downloaded_glew\lib\libglew32 C:\Projects\my_downloaded_freeglut\lib\x64\libfreeglut -lglu32)我相信你已经安装的标题应该是兼容的。
如果有帮助请告诉我。
https://stackoverflow.com/questions/63458637
复制相似问题