GLEW官网下载的wingw64编译的glfw windows开发库,导入自己工程报错信息如下,简单分析是链接libglfw3.a时,libglfw3依赖了其他静态库,报错信息见文件尾, 除__ms_vsnprintf未定义外
方案一:使用动态链接库
动态库和静态库同时存在时,优先链接了静态库,将静态库libglfw3.a删除或移出工程配置路径,便会链接动态库
方案二:使用mingw 的gcc进行编译
由于安装独立的mingw需要翻墙,所以我选择了msys2,msys2里有三个终端,msys2,mingw32和mingw64,在每个终端安装的gcc是不一样的,我从官网下载的glew开发库是mingw进行编译的,所以使用msys2的链接工具链接静态库会有问题,切换到mingw的工具即可,我是使用vscode + cmake编译的工程,直接在cmake底部状态栏点击切换工具包即可
mingw安装地址 独立mingw(需要翻墙),msys2清华大学镜像源
方案三:使用msys2+的gcc编译 GLEW源码
若需要使用msys的gcc/g++工具链进行编译GLEW源码生成静态库(不建议)
[build] cmd.exe /C "cd . && D:\Green_Sorft\msys2\usr\bin\x86_64-pc-msys-g++.exe -g CMakeFiles/imshow.dir/main.cpp.obj -o imshow.exe -Wl,--out-implib,libimshow.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LD:/PROGRA~2/MinGW64/lib -LD:/VS_Prj/openGL/. -lglfw3 -lopengl32 && cd ."
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(init.c.obj):init.c:(.text+0x25e): undefined reference to `__ms_vsnprintf'
[build] D:/VS_Prj/openGL/./libglfw3.a(init.c.obj):init.c:(.text+0x25e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__ms_vsnprintf'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x8f): undefined reference to `__imp_CreateDCW'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x8f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_

本文介绍了解决GLEW和GLFW在Windows环境下编译时遇到的链接错误问题,提供了三种解决方案,包括使用动态链接库、更换编译工具以及重新编译GLEW源码。

1152

被折叠的 条评论
为什么被折叠?



