【发布时间】:2015-02-21 17:51:17
【问题描述】:
我正在尝试建立一个与dueboot 非常相似的项目。也就是说,嵌入式 ARM 上的 Rust。现在,我只能编译 Rust 代码,但我无法编译它。
我基本上完全从那个项目中复制了 rust 代码,但我并不完全理解 lang_items 功能。
#![feature(asm)]
#![feature(lang_items)]
#![feature(no_std)]
#![no_std]
use arduino::{init, delay, pinMode, digitalWrite, analogWrite, LOW, HIGH, OUTPUT};
mod arduino;
#[lang="sized"]
trait Sized {}
#[lang="copy"]
trait Copy {}
#[lang="sync"]
trait Sync {}
static PWM:u32 = 2;
static LED:u32 = 11;
#[no_mangle]
pub fn main() {
// ...
}
尝试按上述方式编译代码,会导致此错误:
main.rs:11:1: 11:15 error: parameter `Self` is never used
main.rs:11 trait Sized {}
^~~~~~~~~~~~~~
main.rs:14:1: 14:14 error: parameter `Self` is never used
main.rs:14 trait Copy {}
^~~~~~~~~~~~~
main.rs:17:1: 17:14 error: parameter `Self` is never used
main.rs:17 trait Sync {}
^~~~~~~~~~~~~
error: aborting due to 3 previous errors
我还尝试注释掉与lang_items 相关的所有行,包括顶部的特征行。这是生成的错误消息:
// more lines of the same message
error: requires `sized` lang_item
error: requires `sized` lang_item
error: requires `sized` lang_item
error: requires `sized` lang_item
error: requires `sized` lang_item
error: aborting due to 54 previous errors
截至昨天,我正在使用 master 构建的 rust。
有什么建议吗?
【问题讨论】:
-
只是一个疯狂的猜测(根本无法编译您的代码):尝试使这些特征
unsafe:pub unsafe trait Copy {}。 -
仍然抱怨
parameter 'Self' is never used。抱歉 - 完整的代码在上面的 repo 中,它似乎不适用于最新的 Rust。 -
您可以尝试使用
trait Blah : ::std::marker::MarkerTrait。见:doc.rust-lang.org/std/marker/trait.MarkerTrait.html -
@BurntSushi5 这有点困难,因为 OP 不能使用
std;) -
我建议复制 MarkerTrait 和 PhantomFn,但这似乎会导致 LLVM 断言。
标签: rust