我的最终目标是在WSL中使用Pixels在Rust中创建数据可视化。
然而,我无法运行Pixels示例,所以我首先想确保Winit可以正常运行。从GitHub下载Winit存储库并运行window
示例可以正常工作。
的数据
但是,如果我创建一个新项目并将示例代码复制粘贴到其中,那么运行代码不会再打开窗口。
的
运行gdb时,代码似乎卡在window.request_redraw()
中,但我找不到其他的东西。
我对窗口系统不是很了解,但是通过运行echo $DISPLAY
和echo $WAYLAND_DISPLAY
,我分别得到了:0
和wayland-0
,我相信这表明WSL安装了X11和Wayland功能。
我正在使用Ubuntu 22.04.3 LTS
。运行cat /proc/version
将打印Linux version 5.15.90.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Jan 27 02:56:13 UTC 2023
。
我似乎对Cargo如何管理依赖性有一些误解,因为我不知道为什么当我指示Cargo下载相同版本的Winit源代码时,相同的代码会在Winit源代码项目中运行,而不是在我自己的项目中运行。我已经尝试了Winit v0.29,v0.28和v0.27,同样的问题仍然存在。
复制步骤:
git clone https://github.com/rust-windowing/winit.git
cd winit
cargo run --example window
字符串
Windows开得很好
cd ..
cargo new window
cd window
cargo add winit
cargo add simple_logger
cp ../winit/examples/window.rs src/main.rs
mkdir src/util
cp ../winit/examples/util/fill.rs src/util
cargo run
型
Windows打不开……
1条答案
按热度按时间ybzsozfc1#
解决了!
TL;DR示例代码有一个我在自己的项目中没有启用的功能标志。
在徒劳地调试了
window.rs
中的主要示例代码后,我处理了fill.rs
中的帮助代码。有一个函数fill_window()
有两个签名:字符串
第一个应该在启用
rwh_05
功能并且target_os
不是android
或ios
时运行。否则,第二个应该运行。我在每一个函数中都放了一个
println!()
,发现我的window
项目正在编译第二个(无操作)函数,而源winit
项目正在编译第一个函数。因此,
target_os == android
、target_os == ios
或rwh_05
未启用。我通过向
fill.rs
添加代码运行了一些测试型
输出显示
target_os
是linux
。型
接下来,
型
输出显示未启用
rwh_05
。型
这就是我得到启示的地方。
我错误地将以下内容放入
Cargo.toml
中,以为它会 * 全局 * 启用rwh_05
,但实际上它只为winit
机箱启用了该功能,而不是我自己的本地项目。型
添加
型
到
Cargo.toml
并使用cargo run --features rwh_05
运行时,窗口示例将按预期运行:x1c 0d1x的数据