You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MSYS2 GCC链接MinGW编译的Raylib库时出现_assert未定义引用,缺失哪个依赖库?

解决MSYS环境下链接MinGW编译的Raylib出现未定义引用的问题

我之前在MSYS环境里折腾Raylib的时候遇到过一模一样的问题,折腾了好一会儿才搞明白根源——MSYS的GCC和你下载的MinGW编译版Raylib,针对的是完全不同的运行环境

问题原因拆解

MSYS的GCC是为x86_64-pc-msys这个类POSIX的环境编译的,它依赖的是MSYS2自己的C标准库;而你下载的Raylib 3.7.0是用原生MinGW-w64编译的,针对的是Windows原生环境,依赖的是msvcrt或者MinGW的标准库。两者的底层系统调用、标准库实现都有差异,所以就会出现_assert这类标准库函数的未定义引用,GLFW相关的错误也是同样的道理——GLFW库也是MinGW环境编译的,和MSYS的GCC不兼容。

具体解决方案

这里给你三个可行的解决方向,按靠谱程度排序:

1. 切换到MinGW-w64的GCC工具链(最推荐)

如果你的MSYS2环境里已经装了mingw64的工具链,直接打开Mingw64 Terminal(而不是MSYS Terminal),然后用里面的gcc执行你原来的编译命令就行——MinGW的GCC能完美识别同环境编译的Raylib库,不会有兼容性问题。

如果没装mingw64工具链,在MSYS终端里用pacman安装:

pacman -S mingw-w64-x86_64-gcc

之后用mingw64-gcc代替gcc来编译:

mingw64-gcc main.c -Iraylib-3.7.0_win64_mingw-w64/include -Lraylib-3.7.0_win64_mingw-w64/lib -lraylib -lopengl32 -lgdi32 -lwinmm

2. 在MSYS环境下重新编译Raylib库

如果一定要用MSYS的GCC,那最好自己在MSYS环境里编译一份Raylib源代码:

# 克隆Raylib仓库(如果没装git先执行 pacman -S git)
git clone https://github.com/raysan5/raylib.git
cd raylib/src
# 用MSYS的GCC编译
make PLATFORM=PLATFORM_DESKTOP CC=gcc

编译完成后,用生成的libraylib.a替换你原来的MinGW版本库,再链接你的代码就能解决问题了。

3. 尝试调整链接选项(临时修复,不保证全解决)

你可以试试在链接命令末尾添加-lmsvcrt,强制链接MinGW的标准库,看看能不能覆盖缺失的符号:

gcc main.c -Iraylib-3.7.0_win64_mingw-w64/include -Lraylib-3.7.0_win64_mingw-w64/lib -lraylib -lopengl32 -lgdi32 -lwinmm -lmsvcrt

不过这个方法可能只能解决_assert这类标准库的问题,GLFW相关的错误大概率还是存在,所以还是优先前两个方案。

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

火山引擎 最新活动