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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值