msys2 + mingw使用cmake配置openGL工程提示__ms_vsnprintf未定义

 

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 `__imp_CreateDCW'
[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+0xc6): undefined reference to `__imp_GetDeviceCaps'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0xc6): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_GetDeviceCaps'
[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+0x123): undefined reference to `__imp_DeleteDC'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x123): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_DeleteDC'
[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+0x263): undefined reference to `__imp_GetDeviceCaps'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x263): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_GetDeviceCaps'
[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+0x86e): undefined reference to `__imp_GetDeviceCaps'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x86e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_GetDeviceCaps'
[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+0x9be): undefined reference to `__imp_GetDeviceCaps'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x9be): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_GetDeviceCaps'
[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+0xda9): undefined reference to `__imp_CreateDCW'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0xda9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_CreateDCW'
[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+0xdb8): undefined reference to `__imp_GetDeviceGammaRamp'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0xdb8): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_GetDeviceGammaRamp'
[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+0xdc4): undefined reference to `__imp_DeleteDC'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0xdc4): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_DeleteDC'
[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+0xf2a): undefined reference to `__imp_CreateDCW'
[build] D:/VS_Prj/openGL/./libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0xf2a): additional relocation overflows omitted from the output
[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+0xf39): undefined reference to `__imp_SetDeviceGammaRamp'
[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+0xf42): undefined reference to `__imp_DeleteDC'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0xbb): undefined reference to `__imp_CreateDIBSection'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0xf4): undefined reference to `__imp_CreateBitmap'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x1af): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x230): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x2cf): undefined reference to `__imp_CreateRectRgn'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x30a): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x363): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x4589): undefined reference to `__imp_CreateDIBSection'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x45c2): undefined reference to `__imp_CreateBitmap'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x4678): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(win32_window.c.obj):win32_window.c:(.text+0x46f3): undefined reference to `__imp_DeleteObject'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0x14a): undefined reference to `__imp_SwapBuffers'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0x3f6): undefined reference to `__imp_ChoosePixelFormat'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0x404): undefined reference to `__imp_SetPixelFormat'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0xcc4): undefined reference to `__imp_DescribePixelFormat'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0xcde): undefined reference to `__imp_SetPixelFormat'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0x1310): undefined reference to `__imp_DescribePixelFormat'
[build] /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: D:/VS_Prj/openGL/./libglfw3.a(wgl_context.c.obj):wgl_context.c:(.text+0x1633): undefined reference to `__imp_DescribePixelFormat'
[build] collect2: error: ld returned 1 exit status

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置MSYS2和MinGW,您可以按照以下步骤进行操作: 1. 首先,安装MSYS2。您可以从官方网站上下载MSYS2安装程序,并按照安装向导的指示进行安装。在安装过程中,注意选择适合您系统的32位或64位版本,并将安装目录设置为您喜欢的位置。 2. 安装完成后,打开MSYS2终端,可以通过单击开始菜单中的"MSYS2 MSYS"快捷方式或运行msys2.exe来打开。确保MSYS2终端正常工作。 3. 接下来,您需要安装MinGW。在MSYS2终端中,使用以下命令安装MinGW: ``` pacman -S mingw-w64-x86_64-toolchain ``` 这将安装64位版本的MinGW。如果您需要32位版本的MinGW,可以使用以下命令: ``` pacman -S mingw-w64-i686-toolchain ``` 这将安装32位版本的MinGW。 4. 安装完成后,您可以在MSYS2终端中使用MinGW。只需切换到MinGW环境并编译您的代码即可。使用以下命令切换到MinGW环境: ``` # 切换到64位MinGW环境 source /mingw64_shell.bat # 切换到32位MinGW环境 source /mingw32_shell.bat ``` 切换到MinGW环境后,您可以使用gcc和g++等编译器进行编译。 5. 至此,您已成功配置MSYS2和MinGW。您可以在MSYS2终端中编译和运行您的程序了。请注意,如果您的程序使用了其他库,您可能需要在MSYS2终端中使用pacman命令安装这些库。例如,要安装CMake,您可以使用以下命令: ``` pacman -S cmake ``` 希望这些步骤能帮助您成功配置MSYS2和MinGW。如果您还有其他问题,请随时提出。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值