You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raylib编译报错:undefined reference to `__imp__wassert' 求助

链接错误:undefined reference to __imp__wassert 解决指南

问题描述

下载raylib-4.2.0_win64_mingw-w64.zip后,使用VS Code的C模板并修改tasks.json配置,尝试移除-static-libgcc、调整-std版本等操作,编译项目时仍出现以下链接错误:

C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2b1e): undefined reference to `__imp__wassert'
C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2ca7): undefined reference to `__imp__wassert'
C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2ceb): undefined reference to `__imp__wassert'
C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2d73): undefined reference to `__imp__wassert'
C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2dad): undefined reference to `__imp__wassert'
C:/raylib-mingw64/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x364f): more undefined references to `__imp__wassert' follow
collect2.exe: error: ld returned 1 exit status

备注:不调用Raylib函数时无此错误。当前tasks.json配置如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "DEBUG-build",
            "command": "g++",
            "args": [
                "-g",
                "-std=c++17",
                "-m64",
                "-O0",
                "-Wall",
                "${workspaceFolder}/src/*.cpp",
                "-o",
                "${workspaceFolder}/build/game.exe",
                "-I./src",
                "-I./src/include",
                "-IC:/raylib-mingw64/include",                
                "-static-libgcc",
                "-LC:/raylib-mingw64/lib",
                "-lraylib",
                "-lopengl32",
                "-lgdi32",
                "-lwinmm",
                "-static-libgcc"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "type": "shell",
            "group": "build",
            "problemMatcher": [],
            "dependsOrder": "sequence",
            "dependsOn": [
                "debug-dir-check",
                "DEBUG-quick-clean"
            ]
        },
        {
            "label": "RELEASE-build",
            "command": "g++",
            "args": [
                "-std=c++17",
                "-m64",
                "-Ofast",
                "${workspaceFolder}/src/*.cpp",
                "${workspaceFolder}/src/my.o",
                "-o",
                "${workspaceFolder}/build/game.exe",
                "-I./src",
                "-I./src/include",
                "-IC:/raylib-mingw64/include",    
                "-LC:/raylib-mingw64/lib",
                "-lraylib",
                "-lopengl32",
                "-lgdi32",
                "-lwinmm",
                "-static-libgcc"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "type": "shell",
            "group": "build",
            "problemMatcher": [],
            "dependsOrder": "sequence",
            "dependsOn": [
                "release-dir-check",
                "RELEASE-quick-clean",              
                "MY-RC-build"
            ]
        },
        {
            "label": "DEBUG-quick-clean",
            "command": "del ${workspaceFolder}/build/*.exe ; del ${workspaceFolder}/src/*.o",
            "type": "shell",
            "group": "build"
        },
        {
            "label": "DEBUG-clean-dist-copy",
            "command": "robocopy ${workspaceFolder}/dist ${workspaceFolder}/build *.* /MIR /XF .gitignore ; exit 0",
            "type": "shell",
            "group": "build"
        },
        {
            "label": "RELEASE-quick-clean",
            "command": "del ${workspaceFolder}/build/*.exe ; del ${workspaceFolder}/src/*.o",
            "type": "shell",
            "group": "build"
        },
        {
            "label": "RELEASE-clean-dist-copy",
            "command": "robocopy ${workspaceFolder}/dist ${workspaceFolder}/build *.* /MIR /XF .gitignore ; exit 0",
            "type": "shell",
            "group": "build"
        },
        {
            "label": "MY-RC-build",
            "command": "windres ${workspaceFolder}/src/my.rc ${workspaceFolder}/src/my.o",
            "type": "shell",
            "group": "build"
        },
        {
            "label": "debug-dir-check",
            "command": "cmd",
            "args": ["/C", "if not exist ${workspaceFolder}\\build mkdir ${workspaceFolder}\\build"],
            "group": "build"
        },
        {
            "label": "release-dir-check",
            "command": "cmd",
            "args": ["/C", "if not exist ${workspaceFolder}\\build mkdir ${workspaceFolder}\\build"],
            "group": "build"
        },
    ]
}

问题根源

这个错误是由于raylib的静态库(libraylib.a)编译时依赖动态版本的libgcc,而当前编译参数中混合了静态/动态链接选项,导致链接器无法找到__imp__wassert符号的定义。

解决方案

方案1:改用动态链接libgcc

移除tasks.json中所有-static-libgcc参数,让编译器使用动态版本的libgcc。操作步骤:

  • 编辑DEBUG-build和RELEASE-build的args数组,删除所有-static-libgcc条目
  • 确保MinGW安装目录下的libgcc_s_seh-1.dll、libstdc++-6.dll等动态库能被程序找到(可将这些文件复制到输出目录build下,或添加MinGW的bin目录到系统环境变量)

修改后的DEBUG-build args示例:

"args": [
    "-g",
    "-std=c++17",
    "-m64",
    "-O0",
    "-Wall",
    "${workspaceFolder}/src/*.cpp",
    "-o",
    "${workspaceFolder}/build/game.exe",
    "-I./src",
    "-I./src/include",
    "-IC:/raylib-mingw64/include",                
    "-LC:/raylib-mingw64/lib",
    "-lraylib",
    "-lopengl32",
    "-lgdi32",
    "-lwinmm"
]

方案2:全静态链接

如果需要生成单文件可执行程序,添加-static参数(会静态链接所有依赖库,包括libgcc、libstdc++和raylib的依赖)。注意:部分系统库可能无法静态链接,需测试兼容性。

修改后的RELEASE-build args示例:

"args": [
    "-std=c++17",
    "-m64",
    "-Ofast",
    "${workspaceFolder}/src/*.cpp",
    "${workspaceFolder}/src/my.o",
    "-o",
    "${workspaceFolder}/build/game.exe",
    "-I./src",
    "-I./src/include",
    "-IC:/raylib-mingw64/include",    
    "-LC:/raylib-mingw64/lib",
    "-lraylib",
    "-lopengl32",
    "-lgdi32",
    "-lwinmm",
    "-static"
]

额外检查点

  • 移除DEBUG-build中重复的-static-libgcc参数(原配置中写了两次)
  • 确认链接库顺序:-lraylib必须放在源文件之后,系统依赖库(-lopengl32等)之前(当前配置顺序正确)

内容的提问来源于stack exchange,提问作者Command17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:55:35