- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 Rust 进行 xlib 调用,但我无法弄清楚为什么这段代码会给我一个段错误。
主要.rs:
extern crate glium;
extern crate x11;
fn main() {
let mut events_loop = glium::glutin::EventsLoop::new();
let context = glium::glutin::ContextBuilder::new();
let window = glium::glutin::WindowBuilder::new()
.with_dimensions(800, 600)
.with_title("Backr");
let display = glium::Display::new(window, context, &events_loop).unwrap();
unsafe {
use x11::xlib;
let x_display = display.gl_window().platform_display() as *mut xlib::Display;
let x_window = display.gl_window().platform_window() as u64;
let x_type = CStr::from_bytes_with_nul(b"_NET_WM_WINDOW_TYPE\0").unwrap();
let x_value = CStr::from_bytes_with_nul(b"_NET_WM_WINDOW_TYPE_DESKTOP\0").unwrap();
xlib::XChangeProperty(
x_display,
x_window,
xlib::XInternAtom(x_display, x_type.as_ptr(), xlib::False),
xlib::XA_ATOM,
32,
xlib::PropModeReplace,
xlib::XInternAtom(x_display, x_type.as_ptr(), xlib::False) as *const u8,
1,
);
}
}
cargo .toml:
[package]
name = "rust-xlib"
version = "0.1.0"
authors = ["Me <me@me.me>"]
[dependencies]
glium = "*"
x11 = { version = "*", features = ["xlib"] }
Valgrind 报告的段错误是:
Invalid read of size 8
at 0x4E7DC40: _XData32 (in /usr/lib/libX11.so.6.3.0)
by 0x4E58682: XChangeProperty (in /usr/lib/libX11.so.6.3.0)
by 0x126898: rust-xlib::main (main.rs:17)
by 0x362397: __rust_maybe_catch_panic (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x34F847: std::panicking::try (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x34C325: std::rt::lang_start (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x1269F2: main (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
Address 0x188 is not stack'd, malloc'd or (recently) free'd
Process terminating with default action of signal 11 (SIGSEGV): dumping core
Access not within mapped region at address 0x18A
at 0x4E7DC40: _XData32 (in /usr/lib/libX11.so.6.3.0)
by 0x4E58682: XChangeProperty (in /usr/lib/libX11.so.6.3.0)
by 0x126898: rust-xlib::main (main.rs:17)
by 0x362397: __rust_maybe_catch_panic (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x34F847: std::panicking::try (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x34C325: std::rt::lang_start (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
by 0x1269F2: main (in /home/me/dev/rust-xlib/target/debug/rust-xlib)
从错误消息看来,XChangeProperty
的 data
参数似乎有问题,但我真的不知道它可能有什么问题。
最佳答案
这应该是正确的解决方案:
unsafe {
use x11::xlib;
let x_display = display.gl_window().platform_display() as *mut xlib::Display;
let x_window = display.gl_window().platform_window() as u64;
let x_type = CStr::from_bytes_with_nul(b"_NET_WM_WINDOW_TYPE\0").unwrap();
let x_value = CStr::from_bytes_with_nul(b"_NET_WM_WINDOW_TYPE_DESKTOP\0").unwrap();
let x_data = xlib::XInternAtom(x_display, x_value.as_ptr(), xlib::False);
xlib::XChangeProperty(
x_display,
x_window,
xlib::XInternAtom(x_display, x_type.as_ptr(), xlib::False),
xlib::XA_ATOM,
32,
xlib::PropModeReplace,
std::mem::transmute(&x_data),
1,
);
}
关于rust - 为什么从 Rust 和 Glium 调用 XChangeProperty 会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47001895/
我正在使用 Glium 为我正在编写的模拟器进行渲染。我拼凑了一些可行的东西(基于 this example ),但我怀疑它效率很低。这是相关的功能: fn update_screen(display
我的问题是在尝试一系列不同的技术时提出的,我对这些技术都没有太多经验。可悲的是,我什至不知道我是否犯了一个愚蠢的逻辑错误,我是否使用了glium crate 错误,我是否在GLSL中搞砸了等等。无论如
我正在尝试将 GUI 添加到 small project of mine使用连杆。我设法解决了 3 个编译错误: error[E0433]: failed to resolve. Could not
我正在尝试将 cgmath 库集成到我的第一个 glium 实验中,但我不知道如何传递我的 Matrix4 对象到 draw() 调用。 我的 uniforms 对象是这样定义的: let unifo
我正在尝试从 Rust 进行 xlib 调用,但我无法弄清楚为什么这段代码会给我一个段错误。 主要.rs: extern crate glium; extern crate x11; fn main(
我是一名优秀的程序员,十分优秀!