WSL Ubuntu 22.04.2中MinilibX测试报错及mlx_init()失败求助
MinilibX在WSL Ubuntu中mlx_init()返回NULL的解决办法
问题根源
MinilibX依赖X11图形系统,而WSL默认没有内置图形显示环境,mlx_init()需要连接到可用的X服务器才能完成初始化,因此会返回NULL,测试脚本也会报"Connection ... !! KO !!"错误。
解决步骤
在Windows端安装X服务器
下载并安装VcXsrv(免费开源的X服务器),启动时选择「Multiple windows」模式,取消勾选「Native opengl」,同时勾选「Disable access control」(避免权限验证问题)。配置WSL的DISPLAY环境变量
在WSL终端中执行以下命令,让WSL指向Windows端的X服务器:export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0若想每次启动终端自动生效,可将上述命令添加到
~/.bashrc或~/.zshrc文件末尾,执行source ~/.bashrc使配置立即生效。安装MinilibX依赖的系统库
在WSL中安装X11相关开发库:sudo apt update && sudo apt install libx11-dev libxext-dev libbsd-dev修正测试代码并重新编译
原代码未判断mlx_init()的返回值,若返回NULL直接调用mlx_destroy_display会导致错误,建议修改为:int main(void) { void *mlx_ptr = mlx_init(); if (mlx_ptr == NULL) { write(2, "mlx_init failed\n", 16); return 1; } mlx_destroy_display(mlx_ptr); free(mlx_ptr); return 0; }编译时需链接MinilibX及X11相关库:
gcc your_test_file.c -lmlx -lX11 -lXext -o test运行编译后的程序,
mlx_init()即可正常完成初始化。
内容的提问来源于stack exchange,提问作者larfef
相关产品推荐
相关产品推荐

